diff --git a/lua/autocmds.lua b/lua/autocmds.lua index 4dbf918..936a148 100644 --- a/lua/autocmds.lua +++ b/lua/autocmds.lua @@ -74,20 +74,21 @@ vim.api.nvim_create_autocmd("FileType", { }) -- --------------------------------------------------------------------------- --- 4. 延迟设置 Treesitter 折叠 +-- 4. 按文件类型设置 Treesitter 折叠 -- --------------------------------------------------------------------------- -- 使用 treesitter 的 foldexpr 进行语法感知的代码折叠。 --- 延迟到 BufEnter 时设置(而非启动时),避免在 startup 阶段加载 treesitter 模块。 +-- 在 FileType 事件中按 buffer 设置 window-local 选项: +-- - 仅对有 treesitter parser 的文件类型启用 expr 折叠 +-- - window-local(vim.wo)而非全局(vim.o),避免污染 help/man/quickfix 等窗口 +-- - 每个 buffer 独立设置,分屏与新窗口正确继承 -- --- once = true 表示此 autocmd 只触发一次,首次 BufEnter 后自动销毁。 -- foldmethod = "expr" 表示使用表达式(foldexpr)计算折叠范围。 -- foldexpr = "v:lua.vim.treesitter.foldexpr()" 是 Neovim 0.10+ 的内置函数, --- 基于 treesitter 语法树计算折叠边界。 -vim.api.nvim_create_autocmd("BufEnter", { +-- 基于 treesitter 语法树计算折叠边界。无 parser 时返回 0(不折叠),不会报错。 +vim.api.nvim_create_autocmd("FileType", { group = group, - once = true, callback = function() - vim.o.foldmethod = "expr" - vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()" + vim.wo.foldmethod = "expr" + vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" end, }) diff --git a/lua/keymaps.lua b/lua/keymaps.lua index 5992afd..307bc9d 100644 --- a/lua/keymaps.lua +++ b/lua/keymaps.lua @@ -67,25 +67,25 @@ map("v", "$", "g_") -- --------------------------------------------------------------------------- -- Neovim 0.12+ 内置了 undotree 插件(nvim.undotree)。 -- 这里通过 packadd 按需加载并打开。 -vim.keymap.set("n", "ud", function() +map("n", "ud", function() vim.cmd.packadd("nvim.undotree") require("undotree").open() end, { desc = "打开内置撤销树" }) -- ds — 诊断位置列表 -vim.keymap.set("n", "ds", function() +map("n", "ds", function() vim.diagnostic.setloclist() end, { desc = "诊断位置列表" }) -- uf - 切换全局自动格式化 -vim.keymap.set("n", "uf", function() +map("n", "uf", function() vim.g.autoformat = vim.g.autoformat == false local state = vim.g.autoformat and "开启" or "关闭" vim.notify("全局自动格式化: " .. state, vim.log.levels.INFO) end, { desc = "切换全局自动格式化" }) -- uF - 切换当前 Buffer 自动格式化 -vim.keymap.set("n", "uF", function() +map("n", "uF", function() local bufnr = vim.api.nvim_get_current_buf() vim.b[bufnr].autoformat = vim.b[bufnr].autoformat == false local state = vim.b[bufnr].autoformat and "开启" or "关闭" diff --git a/lua/options.lua b/lua/options.lua index 6054827..9cdabd3 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -29,7 +29,6 @@ vim.opt.autoread = true -- 当文件被外部修改时自动重新读取 -- 2. 缩进与格式化 -- --------------------------------------------------------------------------- -- 使用 4 空格缩进,适用于大多数语言。 --- 特定语言的缩进设置(如 JS/TS 的 2 空格)应在 ftplugin 中覆盖。 vim.opt.tabstop = 4 -- Tab 键显示的宽度(字符数) vim.opt.softtabstop = 4 -- 插入模式下 Tab/BS 的行为宽度 vim.opt.shiftwidth = 4 -- 自动缩进和 >/< 操作的宽度 @@ -111,18 +110,9 @@ vim.opt.signcolumn = "yes" vim.opt.termguicolors = true -- --------------------------------------------------------------------------- --- 10. 高亮组链接(fallback) --- --------------------------------------------------------------------------- --- colorscheme 中通常已定义 MiniDiffSign 的具体颜色。 --- 如果用户临时切换到其他 colorscheme,此处 link 作为兜底。 -vim.api.nvim_set_hl(0, "MiniDiffSignAdd", { link = "DiffAdd" }) -vim.api.nvim_set_hl(0, "MiniDiffSignChange", { link = "DiffChange" }) -vim.api.nvim_set_hl(0, "MiniDiffSignDelete", { link = "DiffDelete" }) - --- --------------------------------------------------------------------------- --- 11. 折叠设置 +-- 10. 折叠设置 -- --------------------------------------------------------------------------- -- foldlevel = 99 表示默认展开所有折叠。 --- 实际的 foldmethod 和 foldexpr 在 autocmds.lua 中通过 BufEnter 延迟设置, +-- 实际的 foldmethod 和 foldexpr 在 autocmds.lua 中按 buffer 延迟设置, -- 避免启动时加载 treesitter 模块。 vim.opt.foldlevel = 99 diff --git a/lua/plugins/git.lua b/lua/plugins/git.lua index d93f351..beb07de 100644 --- a/lua/plugins/git.lua +++ b/lua/plugins/git.lua @@ -137,10 +137,10 @@ local function load_codediff() diff_get = "do", diff_put = "dp", open_in_prev_tab = "gf", - toggle_stage = "cs", - stage_hunk = "hs", - unstage_hunk = "hu", - discard_hunk = "hr", + toggle_stage = "gs", + stage_hunk = "ghs", + unstage_hunk = "ghu", + discard_hunk = "ghr", hunk_textobject = "ih", show_help = "g?", align_move = "gm",