use {
"windwp/nvim-autopairs",
config =function() require("nvim-autopairs").setup {} end
}
Default values
local disable_filetype = { "TelescopePrompt" }
local disable_in_macro =false-- disable when recording or executing a macrolocal disable_in_visualblock =false-- disable when insert after visual block modelocal ignored_next_char =[=[[%w%%%'%[%"%.]]=]local enable_moveright =truelocal enable_afterquote =true-- add bracket pairs after quotelocal enable_check_bracket_line =true--- check bracket in same linelocal enable_bracket_in_quote =true--local enable_abbr =false-- trigger abbreviationlocal break_undo =true-- switch for basic rule break undo sequencelocal check_ts =falselocal map_cr =truelocal map_bs =true-- map the <BS> keylocal map_c_h =false-- Map the <C-h> key to delete a pairlocal map_c_w =false-- map <c-w> to delete a pair if possible
Before Input After
------------------------------------
{|} <CR> {
|
}
------------------------------------
nvim-cmp
You need to add mapping `CR` on nvim-cmp setup.
Check readme.md on nvim-cmp repo.
-- If you want insert `(` after select function or method itemlocal cmp_autopairs =require('nvim-autopairs.completion.cmp')
local cmp =require('cmp')
cmp.event:on(
'confirm_done',
cmp_autopairs.on_confirm_done()
)
You can customize the kind of completion to add ( or any character.
local handlers =require('nvim-autopairs.completion.handlers')
cmp.event:on(
'confirm_done',
cmp_autopairs.on_confirm_done({
filetypes = {
-- "*" is a alias to all filetypes
["*"] = {
["("] = {
kind = {
cmp.lsp.CompletionItemKind.Function,
cmp.lsp.CompletionItemKind.Method,
},
handler = handlers["*"]
}
},
lua = {
["("] = {
kind = {
cmp.lsp.CompletionItemKind.Function,
cmp.lsp.CompletionItemKind.Method
},
---@param char string---@param item item completion---@param bufnr buffer number
handler =function(char, item, bufnr)
-- Your handler function. Inpect with print(vim.inspect{char, item, bufnr})end
}
},
-- Disable for tex
tex =false
}
})
)
Don't use nil to disable a filetype. If a filetype is nil then * is used as fallback.
If you have a problem with indent after you press <CR>
please check the settings of treesitter indent or install a plugin that has indent support for your filetype.
Rule
nvim-autopairs uses rules with conditions to check pairs.
local Rule =require('nvim-autopairs.rule')
local npairs =require('nvim-autopairs')
npairs.add_rule(Rule("$$","$$","tex"))
-- you can use some built-in conditionslocal cond =require('nvim-autopairs.conds')
print(vim.inspect(cond))
npairs.add_rules({
Rule("$", "$",{"tex", "latex"})
-- don't add a pair if the next character is %
:with_pair(cond.not_after_regex("%%"))
-- don't add a pair if the previous character is xxx
:with_pair(cond.not_before_regex("xxx", 3))
-- don't move right when repeat character
:with_move(cond.none())
-- don't delete if the next character is xx
:with_del(cond.not_after_regex("xx"))
-- disable adding a newline when you press <cr>
:with_cr(cond.none())
},
-- disable for .vim files, but it work for another filetypesRule("a","a","-vim")
)
npairs.add_rules({
Rule("$$","$$","tex")
:with_pair(function(opts)
print(vim.inspect(opts))
if opts.line=="aa $$"then-- don't add pair on that linereturnfalseendend)
}
)
-- you can use regex-- press u1234 => u1234number
npairs.add_rules({
Rule("u%d%d%d%d$", "number", "lua")
:use_regex(true)
})
-- press x1234 => x12341234
npairs.add_rules({
Rule("x%d%d%d%d$", "number", "lua")
:use_regex(true)
:replace_endpair(function(opts)
-- print(vim.inspect(opts))return opts.prev_char:sub(#opts.prev_char-3,#opts.prev_char)
end)
})
-- you can do anything with regex +special key-- example press tab to uppercase text:-- press b1234s<tab> => B1234S1234S
npairs.add_rules({
Rule("b%d%d%d%d%w$", "", "vim")
:use_regex(true,"<tab>")
:replace_endpair(function(opts)
return
opts.prev_char:sub(#opts.prev_char-4,#opts.prev_char)
.."<esc>viwU"end)
})
-- you can exclude filetypes
npairs.add_rule(
Rule("$$","$$")
:with_pair(cond.not_filetypes({"lua"}))
)
--- check ./lua/nvim-autopairs/rules/basic.lua
local npairs =require("nvim-autopairs")
local Rule =require('nvim-autopairs.rule')
npairs.setup({
check_ts =true,
ts_config = {
lua = {'string'},-- it will not add a pair on that treesitter node
javascript = {'template_string'},
java =false,-- don't check treesitter on java
}
})
local ts_conds =require('nvim-autopairs.ts-conds')
-- press % => %% only while inside a comment or string
npairs.add_rules({
Rule("%", "%", "lua")
:with_pair(ts_conds.is_ts_node({'string','comment'})),
Rule("$", "$", "lua")
:with_pair(ts_conds.is_not_ts_node({'function'}))
})
Don't add pairs if it already has a close pair in the same line
if next character is a close pair and it doesn't have an open pair in same line, then it will not add a close pair
Before Input After
------------------------------------
( |)) ( ( (|))
You can customize how nvim-autopairs will behave if it encounters a specific
character
require('nvim-autopairs').setup({
ignored_next_char ="[%w%.]"-- will ignore alphanumeric and `.` symbol
})
Before Input After
------------------------------------
|foobar ( (|foobar
|.foobar ( (|.foobar
Plugin Integration
require('nvim-autopairs').disable()
require('nvim-autopairs').enable()
require('nvim-autopairs').remove_rule('(') -- remove rule (require('nvim-autopairs').clear_rules() -- clear all rulesrequire('nvim-autopairs').get_rule('"') -- get rule " then modify it
FastWrap
Before Input After
--------------------------------------------------
(|foobar <M-e> then press $ (|foobar)
(|)(foobar) <M-e> then press q (|(foobar))
-- put this to setup function and press <a-e> to use fast_wrap
npairs.setup({
fast_wrap = {},
})
-- change default fast_wrap
npairs.setup({
fast_wrap = {
map ='<M-e>',
chars = { '{', '[', '(', '"', "'" },
pattern =[=[[%'%"%)%>%]%)%}%,]]=],
end_key ='$',
keys ='qwertyuiopzxcvbnmasdfghjkl',
check_comma =true,
highlight ='Search',
highlight_grey='Comment'
},
})
请发表评论