fix(fold): 排除 help/man/qf 等特殊 filetype 的 treesitter 折叠
FileType autocmd 对所有文件类型触发,help/qf 原生的 manual 折叠 被 expr 覆盖。增加 filetype 排除表,保留特殊窗口的原生折叠行为, 使实现与注释承诺一致。
This commit is contained in:
parent
6b1cb2d794
commit
e013cb9e88
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user