refactor: 重构Neovim配置结构并更新文档
- 调整配置文件组织方式,新增init.lua作为入口 - 更新lazy-lock.json同步插件版本 - 完善lua/目录下的插件和配置模块结构 - 修改README.md补充配置说明和使用指南
This commit is contained in:
138
lua/plugins/autopairs.lua
Normal file
138
lua/plugins/autopairs.lua
Normal file
@@ -0,0 +1,138 @@
|
||||
return {
|
||||
"windwp/nvim-autopairs",
|
||||
event = "InsertEnter",
|
||||
dependencies = {
|
||||
"hrsh7th/nvim-cmp",
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
},
|
||||
config = function()
|
||||
local npairs = require("nvim-autopairs")
|
||||
local Rule = require("nvim-autopairs.rule")
|
||||
local ts_conds = require("nvim-autopairs.ts-conds") -- 正确导入条件模块
|
||||
|
||||
-- 基础配置(来自官方示例)
|
||||
npairs.setup({
|
||||
check_ts = true, -- 启用 Treesitter 检查
|
||||
ts_config = {
|
||||
lua = { "string" }, -- 在 Lua 的 string 节点中不添加配对
|
||||
javascript = { "template_string" }, -- 在 JS 模板字符串中不添加配对
|
||||
java = false, -- 在 Java 中不检查 Treesitter
|
||||
python = { "string", "comment" }, -- 在 Python 字符串和注释中不添加配对
|
||||
cpp = { "string", "comment" },
|
||||
rust = { "string", "comment" },
|
||||
},
|
||||
disable_filetype = { "TelescopePrompt", "spectre_panel", "lspinfo", "dashboard" },
|
||||
fast_wrap = {
|
||||
map = "<M-e>",
|
||||
chars = { "{", "[", "(", '"', "'", "`" },
|
||||
pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
|
||||
offset = 0,
|
||||
end_key = "$",
|
||||
keys = "qwertyuiopzxcvbnmasdfghjkl",
|
||||
check_comma = true,
|
||||
highlight = "PmenuSel",
|
||||
highlight_grey = "LineNr",
|
||||
},
|
||||
})
|
||||
|
||||
-- 在 string 或 comment 节点中添加 % 配对
|
||||
npairs.add_rules({
|
||||
Rule("%", "%", "lua"):with_pair(ts_conds.is_ts_node({ "string", "comment" })),
|
||||
|
||||
-- 在非 function 节点中添加 $ 配对
|
||||
Rule("$", "$", "lua"):with_pair(ts_conds.is_not_ts_node({ "function" })),
|
||||
|
||||
-- 在非 string 和非 comment 节点中添加引号配对
|
||||
Rule("'", "'", "lua"):with_pair(ts_conds.is_not_ts_node({ "string", "comment" })),
|
||||
Rule('"', '"', "lua"):with_pair(ts_conds.is_not_ts_node({ "string", "comment" })),
|
||||
Rule("`", "`", "lua"):with_pair(ts_conds.is_not_ts_node({ "string", "comment" })),
|
||||
|
||||
-- Python 规则:在非字符串、非注释、非函数参数节点中添加括号
|
||||
Rule("(", ")", "python"):with_pair(ts_conds.is_not_ts_node({ "string", "comment", "parameters" })),
|
||||
|
||||
-- JavaScript/TS 规则
|
||||
Rule("(", ")", "javascript"):with_pair(ts_conds.is_not_ts_node({ "string", "comment", "template_string" })),
|
||||
Rule("(", ")", "typescript"):with_pair(ts_conds.is_not_ts_node({ "string", "comment", "template_string" })),
|
||||
})
|
||||
|
||||
-- 与 nvim-cmp 集成
|
||||
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
|
||||
require("cmp").event:on("confirm_done", cmp_autopairs.on_confirm_done())
|
||||
|
||||
-- 智能回车:在括号内按回车时自动缩进
|
||||
npairs.add_rule(Rule("\n", "\n")
|
||||
:with_pair(function(opts)
|
||||
local line = opts.line
|
||||
local before = line:sub(1, opts.col - 1)
|
||||
local after = line:sub(opts.col)
|
||||
local pair = before:sub(-1) .. after:sub(1)
|
||||
return pair == "{}" or pair == "[]" or pair == "()"
|
||||
end)
|
||||
:with_move(function(opts)
|
||||
return opts.char == "\n"
|
||||
end)
|
||||
:use_key("\n"))
|
||||
|
||||
-- 在 % 后面不添加额外的 ) 例如: %(xxx|) -> %(xxx|)
|
||||
npairs.add_rule(Rule(")", ")"):with_pair(function(opts)
|
||||
local pair = opts.line:sub(opts.col - 1, opts.col)
|
||||
return pair == "(%"
|
||||
end))
|
||||
|
||||
-- Markdown 链接规则
|
||||
npairs.add_rules({
|
||||
Rule("[", "]", "markdown"):with_pair(function(opts)
|
||||
local before = opts.line:sub(1, opts.col - 1)
|
||||
return not before:match("%[.-%]%(") -- 不在已有的链接后添加
|
||||
end),
|
||||
Rule("(", ")", "markdown"):with_pair(function(opts)
|
||||
local before = opts.line:sub(1, opts.col - 2)
|
||||
return before:match("%[.-%]$") -- 只在 [text] 后添加
|
||||
end),
|
||||
})
|
||||
|
||||
-- 快捷键映射
|
||||
local opts = { noremap = true, silent = true, expr = true }
|
||||
|
||||
-- 智能回车(处理括号和 completion)
|
||||
vim.keymap.set("i", "<CR>", function()
|
||||
if vim.fn.pumvisible() == 1 then
|
||||
return "<C-e><CR>"
|
||||
end
|
||||
return npairs.autopairs_cr()
|
||||
end, opts)
|
||||
|
||||
-- 跳过右侧括号
|
||||
vim.keymap.set("i", ")", function()
|
||||
if npairs.jumpable() then
|
||||
return "<Plug>nvim-autopairs-jump-right"
|
||||
else
|
||||
return ")"
|
||||
end
|
||||
end, opts)
|
||||
|
||||
vim.keymap.set("i", "}", function()
|
||||
if npairs.jumpable() then
|
||||
return "<Plug>nvim-autopairs-jump-right"
|
||||
else
|
||||
return "}"
|
||||
end
|
||||
end, opts)
|
||||
|
||||
vim.keymap.set("i", "]", function()
|
||||
if npairs.jumpable() then
|
||||
return "<Plug>nvim-autopairs-jump-right"
|
||||
else
|
||||
return "]"
|
||||
end
|
||||
end, opts)
|
||||
|
||||
-- 智能退格
|
||||
vim.keymap.set("i", "<BS>", function()
|
||||
return npairs.autopairs_bs()
|
||||
end, opts)
|
||||
|
||||
-- 快速包裹
|
||||
vim.keymap.set("v", "<M-e>", "<Plug>nvim-autopairs-fast-wrap", { noremap = true })
|
||||
end,
|
||||
}
|
||||
Reference in New Issue
Block a user