Skip to content

Releases: AuroBreeze/quick-c

Quick-c v1.6.1

11 Dec 03:50
3353153

Choose a tag to compare

Quick-c Release Notes

v1.6.1 (2025-12-11)

新增

  • 目录/项目扫描异步化(非阻塞):QuickCCompileDBGenDirQuickCCompileDBGenProject 均改为异步分步遍历,避免卡主线程。
  • 进度提示(可配置节流):扫描过程中周期性输出进度(文件/目录计数),默认每约 1200ms 一次。
  • 配置项:
    • compile_commands.ignore_dirs(默认 { '.git','node_modules','.cache' }
    • compile_commands.include_hidden(默认 true,遍历以“.”开头的目录)
    • compile_commands.progress_throttle_ms(默认 1200
    • compile_commands.max_depth(默认 4nil 表示不限制)

改进

  • 统一体验:项目与目录两条路径使用相同异步扫描器与过滤策略,行为一致。
  • 可控深度:max_depth 限制递归层数(根为 0),大项目扫描更可控。
  • 按上下文写入:当 outdir='source' 时,生成位置按上下文决定:
    • 单文件:写到“当前文件目录/compile_commands.json”
    • 目录扫描:写到“所选目录/compile_commands.json”
    • 全项目扫描:写到“项目根/compile_commands.json”

使用建议

  1. 扫描全项目(异步)::QuickCCompileDBGenProject
  2. 扫描目录(异步)::QuickCCompileDBGenDir [dir](支持含空格路径与目录补全)
  3. 配置示例:
require('quick-c').setup({
  compile_commands = {
    ignore_dirs = { '.git', '.cache', 'build', '.venv' },
    include_hidden = false,
    progress_throttle_ms = 1200,
    max_depth = 4,
  },
})

验证建议

  1. 设置 include_hidden=false,确认 .hidden/.deps 等目录被跳过;开启后应被纳入。
  2. 设置 max_depth=2,确认仅扫描到二级子目录;提高后包含更深层文件。
  3. 调整 progress_throttle_ms(如 300/1200)观察进度提示频率变化。

兼容性

  • 非破坏性变更;仅目录/项目扫描路径行为改进与增强。

迁移指南

  • 无需迁移;如需更细过滤,请在 ignore_dirs 中补充目录名。

Quick-c v1.6.0

04 Dec 11:57
c78b1a9

Choose a tag to compare

Quick-c Release Notes

v1.6.0 (2025-12-04)

新增

  • 编译数据库生成(compile_commands.json)能力全面扩展:
    • 命令:
      • QuickCCompileDB:按照 compile_commands.mode 统一入口(默认 generate)。
      • QuickCCompileDBGen:强制“生成”当前文件的最小条目(非 CMake 项目便捷使用)。
      • QuickCCompileDBUse:从 compile_commands.use_path 指定文件复制到目标位置。
      • QuickCCompileDBGenProject:扫描项目根(:pwd)递归生成(多文件)。
      • QuickCCompileDBGenDir [dir]:对指定目录递归生成(多文件)。
      • QuickCCompileDBGenSources:通过 Telescope 多选源文件后批量生成(未安装 Telescope 时给出提示)。
      • QuickCCompileDBGenCMake:自动追加 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON,从 CMake 构建目录复制到目标位置。
    • 目标位置策略(compile_commands.outdir):'source'/'cwd'/自定义相对或绝对路径;多文件/项目生成时在 'source' 策略下也会优先写到项目根,便于 clangd 发现。
  • 初始化状态标记:避免命令重复注册与多次初始化带来的潜在问题。
  • 配置模块开关:可按需关闭 Telescope/Make/CMake 等增强,便于与其他生态插件协作。

改进

  • 路径与搜索稳健性:
    • 目录路径做绝对化与分隔符规范化(Windows 下统一处理 \\ 与含空格路径)。
    • 目录/项目扫描采用 glob/globpath 递归收集 **/*.c/**.cpp/**.cc/**.cxx,并对重复条目去重。
    • 生成目标路径会自动 mkdir -p

修复

  • QuickCCompileDBGenDir 的参数处理:
    • 现使用 opts.args,并将 nargs='?' + complete='dir',支持含空格目录与目录补全;避免以空格拼接 fargs 导致的解析错误。
  • 清理与合并初始化路径:移除旧的自动保存初始化残留,避免潜在重复初始化或与其他功能冲突。

使用建议

  1. 非 CMake 项目一次性生成:在项目根执行 :QuickCCompileDBGenProject
  2. 指定目录生成::QuickCCompileDBGenDir "C:/path with space/src" 或无参执行后在输入框中填写目录。
  3. 借用 CMake 导出::QuickCCompileDBGenCMake;或将 compile_commands.mode = 'cmake' 后直接 :QuickCCompileDB
  4. 多文件自选:安装 Telescope 后使用 :QuickCCompileDBGenSources 多选源文件并生成。

验证建议

  1. Windows 下使用包含空格的目录,执行 :QuickCCompileDBGenDir 并确认生成成功,compile_commands.json 路径正确。
  2. 在非 CMake 项目根执行 :QuickCCompileDBGenProject,应生成包含多条目且位于项目根的 compile_commands.json
  3. 在含 CMakeLists.txt 的项目中执行 :QuickCCompileDBGenCMake,若此前未配置,将自动追加导出参数并成功复制文件。

兼容性

  • 无破坏性变更;默认行为与既有用法兼容。
  • 多文件/项目生成在 'source' 策略下会优先写到项目根,便于 clangd 自动发现(单文件生成仍写到当前源文件目录)。

迁移指南

  • 无需迁移。如你依赖旧的目录生成命令,请直接使用新的 QuickCCompileDBGenDir(现支持含空格目录与补全)。

文档

  • 中英文 README 已同步更新新的命令、配置说明与典型使用场景。

Quick-c v1.5.15

04 Dec 10:09
a4635d8

Choose a tag to compare

Quick-c Release Notes

v1.5.15 (2025-12-04)

新增

  • cqM 目标记忆:每个 cwd 记住“上一次选择的目标”,再次打开列表会在顶部显示快捷项:[Last target: <name>],可一键执行。

改进

  • cqM 选择器默认以“正常模式”打开(initial_mode = 'normal'),无需先退出插入模式。

修复

  • 终端已打开但未聚焦时,编辑页触发 cqM 发送命令会“切换/关闭”终端窗口的问题:
    • 不再在发送前强制 open,避免 betterTerm 的 toggle 行为。
    • 发送成功后按策略聚焦:优先聚焦已有终端窗口;无窗口时再兜底 betterTerm.open
    • 聚焦策略优先遵循 betterterm.focus_on_run;未启用 betterTerm 时回退到“无内置终端时才聚焦”。
  • select_or_run_in_terminal 的默认分支移除多余的 open 调用并稳定回退路径,避免潜在的循环加载与焦点抖动。

验证建议

  1. 打开一个终端窗口但保持未聚焦,在代码缓冲执行 <leader>cqM 选择目标:终端不应被关闭,若 focus_on_run = true 则会聚焦;为 false 不抢焦点。
  2. 连续两次选择同一目录下的某个目标,第二次列表顶部应出现 [Last target: <name>],选择即可直接执行;当 make.args.prompt = true 时仍会弹出参数输入框。
  3. cqM 打开后处于正常模式,可直接使用 j/k、 操作。

兼容性

  • 无破坏性变更;默认行为与配置说明一致。

迁移指南

  • 无需迁移;如需跨会话持久化“上次目标”,后续将提供可选方案。

Quick-c v1.5.14

27 Nov 07:50
26bbd94

Choose a tag to compare

Quick-c Release Notes

v1.5.14 (2025-11-27)

修复

  • 构建失败后弹出 quickfix,随后再次使用 cqb 无法构建(队列似乎“卡住”)的问题:
    • 将单/多文件构建路径中 jobstart(...).on_exit 的完整逻辑封装到 pcall 内。
    • 诊断解析、设置 quickfix、打开 quickfix/Telescope、日志写入等步骤全部加上保护;无论是否出错,最终都会调用 done(code) 释放任务队列。

影响范围

  • 版本:v1.5.8 及之后的任务队列版本均可能受影响。
  • 触发条件:构建失败且在 on_exit 阶段出现未捕获异常(例如外部插件/环境差异导致的 require('telescope')setqflist、窗口选项设置异常等)。

根因

  • on_exit 回调中某些分支未出现异常时表现正常;但一旦抛错,done(code) 未被执行,队列保持“进行中”,后续 cqb/cqR 不再被调度。

验证建议

  1. 制造一个会编译失败的示例,执行 <leader>cqb,确认 quickfix 正常弹出;
  2. 立即再次执行 <leader>cqb:QuickCBuild,应能正常开始新的构建;
  3. 在安装/未安装 Telescope 的环境分别验证,均不应再出现“无法再次构建”。

兼容性

  • 无破坏性变更;无需迁移或修改配置。

Quick-c v1.5.13

06 Nov 12:45
5b0ec45

Choose a tag to compare

Quick-c Release Notes

v1.5.13 (2025-11-06) Hotfix

修复

  • 构建交互弹窗(Telescope)在首次出现后用 Esc/q 关闭时,任务未结束导致队列阻塞的问题:
    • 已在选择器中为 <Esc>/q/<C-c> 映射“取消并完成任务”(finalize),确保后续 cqb/cqR 可正常弹窗或执行。
    • 影响表现:第一次打开 cqbcqR 能弹窗,另一条命令无反应;或只有第一次能弹窗,后续均无反应。

影响范围

  • 版本:v1.5.12
  • 条件:compile.user_cmd.enabled = truecompile.user_cmd.telescope.popup = true,并在弹窗中用 Esc/q 关闭。

根因

  • 弹窗关闭未触发回调,任务队列保持“进行中”,后续任务不再调度。

验证建议

  1. cqb 弹窗后按 Esc 取消,任务不应卡住;随后 cqR 正常弹窗/执行。
  2. cqR 选择 [Custom args…] 输入参数后能正常构建并自动运行;再次 cqb 仍可弹窗。
  3. 未安装 Telescope 时回退到 vim.ui.select/input 亦不会阻塞。

兼容性

  • 无破坏性变更;无需迁移或修改配置。

Quick-c v1.5.12

06 Nov 12:23
6c3ff1d

Choose a tag to compare

Quick-c Release Notes

v1.5.12 (2025-11-06)

改进

  • Quickfix 可读性:所有诊断项自动加上分类前缀([error]/[warning]),避免一眼看不出严重级别。
  • 长消息展示:
    • 优先使用增强版 Telescope Quickfix 视图(右侧预览默认软换行)。
    • 回退到 :copen 时,为 quickfix 窗口启用 wrap/linebreak/breakindent,长行不再被遮挡。

新增

  • 自定义编译命令(可选启用):
    • 新增 compile.user_cmd,可通过预设或追加参数自定义编译命令。
    • 保留默认行为:未启用或未弹窗时,仍使用内置命令构建。
  • Telescope 选择器(可选):
    • compile.user_cmd.telescope.popup = true 时,构建前弹出选择:
      • [Use built-in] 使用内置命令
      • [Custom args…] 在内置命令后追加参数(可记忆上次输入)
      • 预设项(presets) 使用完整模板命令(支持占位符)

配置示例

require('quick-c').setup({
  compile = {
    user_cmd = {
      enabled = true,
      telescope = { popup = true },
      -- 作为 [Custom args…] 输入框默认值(无历史时)
      default = { "-O2", "-DNDEBUG" }, -- 或 "-O2 -DNDEBUG"
      remember_last = true,              -- 记住每项目最近一次输入
      -- 完整替换命令(argv 数组,避免 shell 解析问题)
      -- 支持占位符:{sources} {out} {cc} {ft}
      presets = {
        { "{cc}", "-g", "-O0", "-Wall", "-Wextra", "{sources}", "-o", "{out}" },
        { "{cc}", "-O2", "{sources}", "-o", "{out}" },
      },
    },
  },
})

行为

  • 未启用或未弹窗:编译行为与旧版完全一致。
  • 启用+弹窗:
    • [Custom args…] 时,默认值优先“上次输入”,否则使用 default
    • 选预设时,用完整模板命令替换内置命令。

兼容性

  • 无破坏性变更;旧配置无需修改即可继续使用。

Quick-c v1.5.11

04 Nov 06:04
83afcc9

Choose a tag to compare

Quick-c Release Notes

v1.5.11 (2025-11-04)

修复

  • 单文件 cqR 在无终端或有终端时偶发多出字符 A 的问题:
    • 改进运行阶段的终端打开与焦点切换顺序,避免残余按键泄漏到终端。
  • 连续多次使用 cqRcqr 偶发“无反应/不调出终端”的问题:
    • 在不抢焦点的场景也确保 BetterTerm 会话被打开,然后立刻恢复原窗口,保证后续发送可靠。
  • betterterm.focus_on_run = false 仍会聚焦终端的问题:
    • 严格遵循配置与调用方覆写:仅当配置为 true 且调用未关闭时才聚焦。
    • 发送后增加一次“二次恢复”以规避个别 betterTerm 版本在 send/open 后异步抢焦点。

改进

  • 终端聚焦行为与配置对齐:
    • betterterm.enabled = truebetterterm.focus_on_run = true(默认)时,cqr/cqR 运行后将聚焦到终端。
    • focus_on_run = false 时,不会抢焦点,但仍会确保会话存在并发送成功。
  • 更稳健的窗口恢复:当不聚焦终端时,发送前后会恢复上一个窗口并在必要时执行 stopinsert,避免误入插入模式。

兼容性

  • 无破坏性变更;默认行为与文档一致。如需自定义聚焦策略,请在 setup({ betterterm = { focus_on_run = ... } }) 中覆盖。

迁移指南

  • 无需迁移。建议升级后验证以下场景:
    1. 单文件下多次执行 cqR/cqr 均能正常发送并按配置聚焦。
    2. 在不聚焦设置下,终端不抢焦点但命令发送可靠,无多余按键注入。

Quick-c v1.6.0-beta-1.0

02 Nov 02:53

Choose a tag to compare

Pre-release

Quick-c Release Notes

v1.6.0-beta-1.0 (break change) (2025-11-02)

新功能

  • 流式 Make 目标解析:边读边解析 make -qp,中/大型项目增量呈现目标,降低卡顿与内存峰值;-qp 无效/无结果时自动回退 -pn
  • Telescope 流式选择器:新增 telescope_make_stream(命令 :QuickCMakeStream)。
    • 增量刷新;<C-p> 切换仅显示 .PHONY<C-c> 取消扫描;关闭选择器自动停止解析并提示。
  • 自动检测与切换::QuickCMakemake.streaming.enabled=false 时先轻量流式探测,若目标数快速增长/超时,自动切换为流式并提示,同时将 streaming.enabled 置为 true。
  • 队列与状态统一:流式扫描封装为任务 make-scan,支持 parse_timeout_ms 超时;开始/结束通过 status 上报;标准化结果标签 OK/Timeout/Canceled/Error

配置变更

  • 新增:
    • make.streaming.enabled = true
    • make.streaming.batch_size = 100
    • make.streaming.throttle_ms = 60
    • make.parse_timeout_ms = 0
  • 兼容保留:make.cache.ttlmake.prefermake.no_dash_Cmake.telescope.*

性能与内存

  • 不缓存完整 stdout,内存占用与“唯一目标数”线性相关;批次缓冲/残缺行缓冲极小;完成/取消后释放引用。

命令与键位

  • 新增命令:QuickCMakeStream 直接打开流式 Make 目标选择器。
  • 既有命令:QuickCMake 自动选择流式/旧模式(遇到大输出自动切流式)。
  • 选择器内:<C-p> 切换 PHONY-only;<C-c> 取消流式扫描。

修复

  • 修复 quick-c.telescope 模块可能返回 boolean 的问题,确保稳定导出接口。
  • 修复流式解析中 .PHONY 未被识别与显示的问题(make -qp/-pn 输出解析)。
  • 改进流式目标预览的定位:在正常加载 Makefile 时也进行行级扫描与二次 Vim 正则搜索,显著提升光标跳转命中率。

兼容性

  • Neovim 0.8+;Windows/WSL/MinGW/nmake/Cygwin/Linux/macOS 兼容;nmake 自动使用 -n -p 兼容模式。

升级指南

  • 升级后如遇模块缓存,请执行:
    • :lua package.loaded['quick-c.telescope']=nil
    • :lua package.loaded['quick-c']=nil
    • :lua require('quick-c').setup()
  • 可在 setup({ make = { streaming = { enabled = true/false } } }) 控制默认行为。

已知问题与后续计划

  • 极端超大项目下 Telescope 可能出现轻微刷新抖动;后续将优化节流与批大小自适应。
  • 将补充 README 与指南,覆盖流式解析、自动切换与新命令说明。

Quick-c v1.5.10

02 Nov 01:29
403cdc5

Choose a tag to compare

Quick-c Release Notes

v1.5.10 (2025-11-02)

修复

  • Make(cqM)在无终端时不聚焦且切入插入模式的问题:
    • 首次运行时如无打开终端,将自动聚焦到终端。
    • 当选择不聚焦终端时,返回原窗口会在必要时执行 stopinsert,避免把普通缓冲区置于插入模式。
    • 适配内置终端与 betterTerm 两种路径。
  • 多终端时选择“默认终端策略”后不聚焦、终端窗口“闪一下后关闭”的问题:
    • 发送完成后会按策略聚焦:若启用 betterTerm 且 focus_on_run = true,则延迟 open(index);否则聚焦最近的内置终端窗口。
    • 避免在无需聚焦时提前 open() betterTerm,防止 UI 抖动/闪退。

兼容性

  • 无破坏性变更,默认即可。
  • betterTerm 用户:保留默认 focus_on_run = true 可配合新逻辑正常聚焦。

迁移指南

  • 无需迁移。建议在升级后验证两种场景:
    1. 无打开终端时运行 cqM:应聚焦终端,原缓冲区不会被置为插入模式。
    2. 已有终端时运行 cqM:不应抢焦点,原缓冲区保持原模式。

Quick-c v1.5.9

01 Nov 02:21
a91ce7e

Choose a tag to compare

Quick-c Release Notes

v1.5.9 (2025-11-01)

改进

  • 终端聚焦体验:
    • cqb/cqR/cqr 执行后默认聚焦到终端(betterTerm 或内置)。
    • cqM 发送前不聚焦、发送后延迟聚焦,兼顾防按键泄漏与聚焦需求。
  • 终端选择器仅在需要时弹出:choose_terminal = 'auto' 模式下,0/1 个终端时直接使用默认策略,2+ 个终端时才打开选择器;'always' 始终弹出,'never' 从不弹出。

修复

  • 修复在多个终端时,cqM 通过 Telescope 选择终端会自动输入一个 “A” 的问题:
    • 打开选择器改为 vim.defer_fn(..., 120) 延迟触发,确保按键序列结束后再创建 UI。
    • 选择器内吞掉一次可能泄漏的 A 键(normal/insert 模式)。
    • 选择器使用 initial_mode = 'normal',并在发送命令前不切换焦点,避免键继续泄漏。
    • 发送完成后再延迟聚焦至所选终端(betterTerm/内置)。
  • 稳定性:cqM 触发路径在键位侧包裹 vim.schedule,进一步降低残余按键注入概率。

Bug 记录

  • 标题:cqM 在多终端(2 个及以上)时,Telescope 选择终端会自动输入一个 “A”。
  • 影响范围:有 Telescope 且存在 2+ 个内置终端的场景(Windows/macOS/Linux 均可能发生)。
  • 触发条件:通过 <leader>cqM 打开选择器,按键序列末尾的大写键在弹窗创建瞬间泄漏。
  • 根因分析:
    • 选择器在按键处理尚未完全结束时创建,存在残余按键注入窗口;
    • 发送前聚焦终端或选择器处于可编辑状态会放大该问题表现。
  • 修复方案:
    • 选择器延迟创建(vim.defer_fn(..., 120))+ 选择器内吞掉一次 A(normal/insert);
    • 发送前不聚焦终端,发送成功后再延迟聚焦;
    • auto 模式下仅在 2+ 终端时弹选择器,0/1 终端直达默认策略。
  • 验证步骤:
    1. 打开 2 个以上内置终端;
    2. 执行 <leader>cqM 并在选择器中选择终端;
    3. 选择器不出现首个 “A”,命令正确发送;
    4. 发送后终端获得焦点(betterTerm/内置)。

兼容性

  • 无破坏性变更;默认配置即可获得上述改进。
  • betterTerm 用户:保留默认 focus_on_run = true 可配合新逻辑正常聚焦。

迁移指南

  • 无需迁移。若仍在极端环境下偶发按键残留,可将延迟从 120ms 调整为更大(后续将视反馈加入可配置项)。