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,