fix(fold): 排除 help/man/qf 等特殊 filetype 的 treesitter 折叠

FileType autocmd 对所有文件类型触发,help/qf 原生的 manual 折叠
被 expr 覆盖。增加 filetype 排除表,保留特殊窗口的原生折叠行为,
使实现与注释承诺一致。
This commit is contained in:
xfy 2026-06-16 09:59:28 +08:00
parent 6b1cb2d794
commit e013cb9e88

View File

@ -78,16 +78,20 @@ vim.api.nvim_create_autocmd("FileType", {
-- ---------------------------------------------------------------------------
-- 使用 treesitter 的 foldexpr 进行语法感知的代码折叠。
-- 在 FileType 事件中按 buffer 设置 window-local 选项:
-- - 仅对有 treesitter parser 的文件类型启用 expr 折叠
-- - window-localvim.wo而非全局vim.o避免污染 help/man/quickfix 等窗口
-- - 每个 buffer 独立设置,分屏与新窗口正确继承
-- - window-localvim.wo而非全局vim.o每个 buffer 独立
-- - 排除非代码 filetypehelp/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,