Releases: AuroBreeze/quick-c
Releases · AuroBreeze/quick-c
Quick-c v1.6.1
Quick-c Release Notes
v1.6.1 (2025-12-11)
新增
- 目录/项目扫描异步化(非阻塞):
QuickCCompileDBGenDir、QuickCCompileDBGenProject均改为异步分步遍历,避免卡主线程。 - 进度提示(可配置节流):扫描过程中周期性输出进度(文件/目录计数),默认每约 1200ms 一次。
- 配置项:
compile_commands.ignore_dirs(默认{ '.git','node_modules','.cache' })compile_commands.include_hidden(默认true,遍历以“.”开头的目录)compile_commands.progress_throttle_ms(默认1200)compile_commands.max_depth(默认4;nil表示不限制)
改进
- 统一体验:项目与目录两条路径使用相同异步扫描器与过滤策略,行为一致。
- 可控深度:
max_depth限制递归层数(根为 0),大项目扫描更可控。 - 按上下文写入:当
outdir='source'时,生成位置按上下文决定:- 单文件:写到“当前文件目录/compile_commands.json”
- 目录扫描:写到“所选目录/compile_commands.json”
- 全项目扫描:写到“项目根/compile_commands.json”
使用建议
- 扫描全项目(异步):
:QuickCCompileDBGenProject - 扫描目录(异步):
:QuickCCompileDBGenDir [dir](支持含空格路径与目录补全) - 配置示例:
require('quick-c').setup({
compile_commands = {
ignore_dirs = { '.git', '.cache', 'build', '.venv' },
include_hidden = false,
progress_throttle_ms = 1200,
max_depth = 4,
},
})验证建议
- 设置
include_hidden=false,确认.hidden/.deps等目录被跳过;开启后应被纳入。 - 设置
max_depth=2,确认仅扫描到二级子目录;提高后包含更深层文件。 - 调整
progress_throttle_ms(如 300/1200)观察进度提示频率变化。
兼容性
- 非破坏性变更;仅目录/项目扫描路径行为改进与增强。
迁移指南
- 无需迁移;如需更细过滤,请在
ignore_dirs中补充目录名。
Quick-c v1.6.0
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。
- 目录路径做绝对化与分隔符规范化(Windows 下统一处理
修复
QuickCCompileDBGenDir的参数处理:- 现使用
opts.args,并将nargs='?'+complete='dir',支持含空格目录与目录补全;避免以空格拼接fargs导致的解析错误。
- 现使用
- 清理与合并初始化路径:移除旧的自动保存初始化残留,避免潜在重复初始化或与其他功能冲突。
使用建议
- 非 CMake 项目一次性生成:在项目根执行
:QuickCCompileDBGenProject。 - 指定目录生成:
:QuickCCompileDBGenDir "C:/path with space/src"或无参执行后在输入框中填写目录。 - 借用 CMake 导出:
:QuickCCompileDBGenCMake;或将compile_commands.mode = 'cmake'后直接:QuickCCompileDB。 - 多文件自选:安装 Telescope 后使用
:QuickCCompileDBGenSources多选源文件并生成。
验证建议
- Windows 下使用包含空格的目录,执行
:QuickCCompileDBGenDir并确认生成成功,compile_commands.json路径正确。 - 在非 CMake 项目根执行
:QuickCCompileDBGenProject,应生成包含多条目且位于项目根的compile_commands.json。 - 在含 CMakeLists.txt 的项目中执行
:QuickCCompileDBGenCMake,若此前未配置,将自动追加导出参数并成功复制文件。
兼容性
- 无破坏性变更;默认行为与既有用法兼容。
- 多文件/项目生成在
'source'策略下会优先写到项目根,便于 clangd 自动发现(单文件生成仍写到当前源文件目录)。
迁移指南
- 无需迁移。如你依赖旧的目录生成命令,请直接使用新的
QuickCCompileDBGenDir(现支持含空格目录与补全)。
文档
- 中英文 README 已同步更新新的命令、配置说明与典型使用场景。
Quick-c v1.5.15
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调用并稳定回退路径,避免潜在的循环加载与焦点抖动。
验证建议
- 打开一个终端窗口但保持未聚焦,在代码缓冲执行
<leader>cqM选择目标:终端不应被关闭,若focus_on_run = true则会聚焦;为false不抢焦点。 - 连续两次选择同一目录下的某个目标,第二次列表顶部应出现
[Last target: <name>],选择即可直接执行;当make.args.prompt = true时仍会弹出参数输入框。 - cqM 打开后处于正常模式,可直接使用 j/k、 操作。
兼容性
- 无破坏性变更;默认行为与配置说明一致。
迁移指南
- 无需迁移;如需跨会话持久化“上次目标”,后续将提供可选方案。
Quick-c v1.5.14
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不再被调度。
验证建议
- 制造一个会编译失败的示例,执行
<leader>cqb,确认 quickfix 正常弹出; - 立即再次执行
<leader>cqb或:QuickCBuild,应能正常开始新的构建; - 在安装/未安装 Telescope 的环境分别验证,均不应再出现“无法再次构建”。
兼容性
- 无破坏性变更;无需迁移或修改配置。
Quick-c v1.5.13
Quick-c Release Notes
v1.5.13 (2025-11-06) Hotfix
修复
- 构建交互弹窗(Telescope)在首次出现后用 Esc/q 关闭时,任务未结束导致队列阻塞的问题:
- 已在选择器中为
<Esc>/q/<C-c>映射“取消并完成任务”(finalize),确保后续cqb/cqR可正常弹窗或执行。 - 影响表现:第一次打开
cqb或cqR能弹窗,另一条命令无反应;或只有第一次能弹窗,后续均无反应。
- 已在选择器中为
影响范围
- 版本:v1.5.12
- 条件:
compile.user_cmd.enabled = true且compile.user_cmd.telescope.popup = true,并在弹窗中用 Esc/q 关闭。
根因
- 弹窗关闭未触发回调,任务队列保持“进行中”,后续任务不再调度。
验证建议
cqb弹窗后按 Esc 取消,任务不应卡住;随后cqR正常弹窗/执行。cqR选择[Custom args…]输入参数后能正常构建并自动运行;再次cqb仍可弹窗。- 未安装 Telescope 时回退到
vim.ui.select/input亦不会阻塞。
兼容性
- 无破坏性变更;无需迁移或修改配置。
Quick-c v1.5.12
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
Quick-c Release Notes
v1.5.11 (2025-11-04)
修复
- 单文件
cqR在无终端或有终端时偶发多出字符A的问题:- 改进运行阶段的终端打开与焦点切换顺序,避免残余按键泄漏到终端。
- 连续多次使用
cqR或cqr偶发“无反应/不调出终端”的问题:- 在不抢焦点的场景也确保 BetterTerm 会话被打开,然后立刻恢复原窗口,保证后续发送可靠。
betterterm.focus_on_run = false仍会聚焦终端的问题:- 严格遵循配置与调用方覆写:仅当配置为 true 且调用未关闭时才聚焦。
- 发送后增加一次“二次恢复”以规避个别 betterTerm 版本在 send/open 后异步抢焦点。
改进
- 终端聚焦行为与配置对齐:
- 当
betterterm.enabled = true且betterterm.focus_on_run = true(默认)时,cqr/cqR运行后将聚焦到终端。 - 当
focus_on_run = false时,不会抢焦点,但仍会确保会话存在并发送成功。
- 当
- 更稳健的窗口恢复:当不聚焦终端时,发送前后会恢复上一个窗口并在必要时执行
stopinsert,避免误入插入模式。
兼容性
- 无破坏性变更;默认行为与文档一致。如需自定义聚焦策略,请在
setup({ betterterm = { focus_on_run = ... } })中覆盖。
迁移指南
- 无需迁移。建议升级后验证以下场景:
- 单文件下多次执行
cqR/cqr均能正常发送并按配置聚焦。 - 在不聚焦设置下,终端不抢焦点但命令发送可靠,无多余按键注入。
- 单文件下多次执行
Quick-c v1.6.0-beta-1.0
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>取消扫描;关闭选择器自动停止解析并提示。
- 增量刷新;
- 自动检测与切换:
:QuickCMake在make.streaming.enabled=false时先轻量流式探测,若目标数快速增长/超时,自动切换为流式并提示,同时将streaming.enabled置为 true。 - 队列与状态统一:流式扫描封装为任务
make-scan,支持parse_timeout_ms超时;开始/结束通过status上报;标准化结果标签OK/Timeout/Canceled/Error。
配置变更
- 新增:
make.streaming.enabled = truemake.streaming.batch_size = 100make.streaming.throttle_ms = 60make.parse_timeout_ms = 0
- 兼容保留:
make.cache.ttl、make.prefer、make.no_dash_C、make.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
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 且
兼容性
- 无破坏性变更,默认即可。
- betterTerm 用户:保留默认
focus_on_run = true可配合新逻辑正常聚焦。
迁移指南
- 无需迁移。建议在升级后验证两种场景:
- 无打开终端时运行
cqM:应聚焦终端,原缓冲区不会被置为插入模式。 - 已有终端时运行
cqM:不应抢焦点,原缓冲区保持原模式。
- 无打开终端时运行
Quick-c v1.5.9
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 终端直达默认策略。
- 选择器延迟创建(
- 验证步骤:
- 打开 2 个以上内置终端;
- 执行
<leader>cqM并在选择器中选择终端; - 选择器不出现首个 “A”,命令正确发送;
- 发送后终端获得焦点(betterTerm/内置)。
兼容性
- 无破坏性变更;默认配置即可获得上述改进。
- betterTerm 用户:保留默认
focus_on_run = true可配合新逻辑正常聚焦。
迁移指南
- 无需迁移。若仍在极端环境下偶发按键残留,可将延迟从 120ms 调整为更大(后续将视反馈加入可配置项)。