From e013cb9e8803f1ae98a96049f4ad1d7ac10b5fc4 Mon Sep 17 00:00:00 2001 From: xfy Date: Tue, 16 Jun 2026 09:59:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(fold):=20=E6=8E=92=E9=99=A4=20help/man/qf?= =?UTF-8?q?=20=E7=AD=89=E7=89=B9=E6=AE=8A=20filetype=20=E7=9A=84=20treesit?= =?UTF-8?q?ter=20=E6=8A=98=E5=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FileType autocmd 对所有文件类型触发,help/qf 原生的 manual 折叠 被 expr 覆盖。增加 filetype 排除表,保留特殊窗口的原生折叠行为, 使实现与注释承诺一致。 --- lua/autocmds.lua | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lua/autocmds.lua b/lua/autocmds.lua index 936a148..6fb63c2 100644 --- a/lua/autocmds.lua +++ b/lua/autocmds.lua @@ -78,16 +78,20 @@ vim.api.nvim_create_autocmd("FileType", { -- --------------------------------------------------------------------------- -- 使用 treesitter 的 foldexpr 进行语法感知的代码折叠。 -- 在 FileType 事件中按 buffer 设置 window-local 选项: --- - 仅对有 treesitter parser 的文件类型启用 expr 折叠 --- - window-local(vim.wo)而非全局(vim.o),避免污染 help/man/quickfix 等窗口 --- - 每个 buffer 独立设置,分屏与新窗口正确继承 +-- - window-local(vim.wo)而非全局(vim.o),每个 buffer 独立 +-- - 排除非代码 filetype(help/man/qf),保留它们的原生折叠行为 -- -- foldmethod = "expr" 表示使用表达式(foldexpr)计算折叠范围。 -- foldexpr = "v:lua.vim.treesitter.foldexpr()" 是 Neovim 0.10+ 的内置函数, -- 基于 treesitter 语法树计算折叠边界。无 parser 时返回 0(不折叠),不会报错。 vim.api.nvim_create_autocmd("FileType", { group = group, - callback = function() + callback = function(args) + -- 跳过非代码 filetype,保留它们的原生折叠行为 + local excluded = { help = true, man = true, qf = true, terminal = true } + if excluded[vim.bo[args.buf].filetype] then + return + end vim.wo.foldmethod = "expr" vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" end,