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 进行语法感知的代码折叠。
|
-- 使用 treesitter 的 foldexpr 进行语法感知的代码折叠。
|
||||||
-- 在 FileType 事件中按 buffer 设置 window-local 选项:
|
-- 在 FileType 事件中按 buffer 设置 window-local 选项:
|
||||||
-- - 仅对有 treesitter parser 的文件类型启用 expr 折叠
|
-- - window-local(vim.wo)而非全局(vim.o),每个 buffer 独立
|
||||||
-- - window-local(vim.wo)而非全局(vim.o),避免污染 help/man/quickfix 等窗口
|
-- - 排除非代码 filetype(help/man/qf),保留它们的原生折叠行为
|
||||||
-- - 每个 buffer 独立设置,分屏与新窗口正确继承
|
|
||||||
--
|
--
|
||||||
-- foldmethod = "expr" 表示使用表达式(foldexpr)计算折叠范围。
|
-- foldmethod = "expr" 表示使用表达式(foldexpr)计算折叠范围。
|
||||||
-- foldexpr = "v:lua.vim.treesitter.foldexpr()" 是 Neovim 0.10+ 的内置函数,
|
-- foldexpr = "v:lua.vim.treesitter.foldexpr()" 是 Neovim 0.10+ 的内置函数,
|
||||||
-- 基于 treesitter 语法树计算折叠边界。无 parser 时返回 0(不折叠),不会报错。
|
-- 基于 treesitter 语法树计算折叠边界。无 parser 时返回 0(不折叠),不会报错。
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
group = group,
|
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.foldmethod = "expr"
|
||||||
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
||||||
end,
|
end,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user