[go: up one dir, main page]

0% found this document useful (0 votes)
132 views8 pages

Nvim Autopairs

This document provides documentation on nvim-autopairs, a Neovim plugin that adds matching parentheses, brackets, and quotes as you type. It describes how to install the plugin, configure default values, add custom pairing rules using treesitter, and integrate with other plugins like nvim-cmp.

Uploaded by

eightsamsix2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
132 views8 pages

Nvim Autopairs

This document provides documentation on nvim-autopairs, a Neovim plugin that adds matching parentheses, brackets, and quotes as you type. It describes how to install the plugin, configure default values, add custom pairing rules using treesitter, and integrate with other plugins like nvim-cmp.

Uploaded by

eightsamsix2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

*nvim-autopairs.txt* A super powerful autopair for Neovim.

==============================================================================
Table of Contents *nvim-autopairs-table-of-contents*

- nvim-autopairs |nvim-autopairs-nvim-autopairs|
- Installation |nvim-autopairs-installation|
- Default values |nvim-autopairs-default-values|
- Sponsors |nvim-autopairs-sponsors|

NVIM-AUTOPAIRS *nvim-autopairs-nvim-autopairs*

A super powerful autopair plugin for Neovim that supports multiple characters.

Requires neovim 0.7

INSTALLATION *nvim-autopairs-installation*

Install the plugin with your preferred package manager:

VIM-PLUG <HTTPS://GITHUB.COM/JUNEGUNN/VIM-PLUG> ~

>
Plug 'windwp/nvim-autopairs'

lua << EOF


require("nvim-autopairs").setup {}
EOF
<

PACKER <HTTPS://GITHUB.COM/WBTHOMASON/PACKER.NVIM> ~

>
use {
"windwp/nvim-autopairs",
config = function() require("nvim-autopairs").setup {} end
}
<

DEFAULT VALUES *nvim-autopairs-default-values*

>
local disable_filetype = { "TelescopePrompt" }
local disable_in_macro = false -- disable when recording or executing a macro
local disable_in_visualblock = false -- disable when insert after visual block
mode
local disable_in_replace_mode = true
local ignored_next_char = [=[[%w%%%'%[%"%.%`%$]]=]
local enable_moveright = true
local enable_afterquote = true -- add bracket pairs after quote
local enable_check_bracket_line = true --- check bracket in same line
local enable_bracket_in_quote = true --
local enable_abbr = false -- trigger abbreviation
local break_undo = true -- switch for basic rule break undo sequence
local check_ts = false
local map_cr = true
local map_bs = true -- map the <BS> key
local map_c_h = false -- Map the <C-h> key to delete a pair
local map_c_w = false -- map <c-w> to delete a pair if possible
<

OVERRIDE DEFAULT VALUES ~

>
require('nvim-autopairs').setup({
disable_filetype = { "TelescopePrompt" , "vim" },
})
<

*nvim-autopairs-Mapping-`<CR>`*

>
Before Input After
------------------------------------
{|} <CR> {
|
}
------------------------------------
<

nvim-cmp ~

<h3>

You need to add mapping `CR` on nvim-cmp setup.


Check readme.md on nvim-cmp repo.

</h3>

>
-- If you want insert `(` after select function or method item
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
local cmp = require('cmp')
cmp.event:on(
'confirm_done',
cmp_autopairs.on_confirm_done()
)
<

Mapping `<CR>` 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 table item completion
---@param bufnr number buffer number
---@param rules table
---@param commit_character table<string>
handler = function(char, item, bufnr, rules, commit_character)
-- Your handler function. Inpect with print(vim.inspect{char, item,
bufnr, rules, commit_character})
end
}
},
-- Disable for tex
tex = false
}
})
)
<

Don’t use `nil` to disable a filetype. If a filetype is `nil` then `*` is


used as fallback.

coq_nvim ~

>
local remap = vim.api.nvim_set_keymap
local npairs = require('nvim-autopairs')

npairs.setup({ map_bs = false, map_cr = false })

vim.g.coq_settings = { keymap = { recommended = false } }

-- these mappings are coq recommended mappings unrelated to nvim-autopairs


remap('i', '<esc>', [[pumvisible() ? "<c-e><esc>" : "<esc>"]], { expr = true,
noremap = true })
remap('i', '<c-c>', [[pumvisible() ? "<c-e><c-c>" : "<c-c>"]], { expr = true,
noremap = true })
remap('i', '<tab>', [[pumvisible() ? "<c-n>" : "<tab>"]], { expr = true,
noremap = true })
remap('i', '<s-tab>', [[pumvisible() ? "<c-p>" : "<bs>"]], { expr = true,
noremap = true })

-- skip it, if you use another global object


_G.MUtils= {}
MUtils.CR = function()
if vim.fn.pumvisible() ~= 0 then
if vim.fn.complete_info({ 'selected' }).selected ~= -1 then
return npairs.esc('<c-y>')
else
return npairs.esc('<c-e>') .. npairs.autopairs_cr()
end
else
return npairs.autopairs_cr()
end
end
remap('i', '<cr>', 'v:lua.MUtils.CR()', { expr = true, noremap = true })

MUtils.BS = function()
if vim.fn.pumvisible() ~= 0 and vim.fn.complete_info({ 'mode' }).mode ==
'eval' then
return npairs.esc('<c-e>') .. npairs.autopairs_bs()
else
return npairs.autopairs_bs()
end
end
remap('i', '<bs>', 'v:lua.MUtils.BS()', { expr = true, noremap = true })
<

without completion plugin ~

>
-- add option map_cr
npairs.setup({ map_cr = true })
<

another completion plugin


<https://github.com/windwp/nvim-autopairs/wiki/Completion-plugin>

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 conditions

local 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 filetypes
Rule("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 line
return false
end
end)
}
)

-- 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
<

Rules API <https://github.com/windwp/nvim-autopairs/wiki/Rules-API>

TREESITTER ~

You can use treesitter to check for a pair.

>
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
------------------------------------
( |)) ( ( (|))
<

>
require('nvim-autopairs').setup({
enable_check_bracket_line = false
})
<
DON’T ADD PAIRS IF THE NEXT CHAR IS ALPHANUMERIC ~

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 rules
-- get rule " then modify it. It can return a list of rule or just a rule
require('nvim-autopairs').get_rule('"')
<

- Sample

>
-- remove add single quote on filetype scheme or lisp
require("nvim-autopairs").get_rule("'")[1].not_filetypes = { "scheme", "lisp" }
require("nvim-autopairs").get_rule("'")[1]:with_pair(cond.not_after_text("["}))
<

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'
},
})
<

AUTOTAG HTML AND TSX ~

autotag <https://github.com/windwp/nvim-ts-autotag>

ENDWISE ~

endwise <https://github.com/windwp/nvim-autopairs/wiki/Endwise>

CUSTOM RULES ~

rules <https://github.com/windwp/nvim-autopairs/wiki/Custom-rules>

SPONSORS *nvim-autopairs-sponsors*

Thanks to everyone who sponsors my projects and makes continued development


maintenance possible! <!-- patreon --><a href="https://github.com/t4t5"><img
src="https://github.com/t4t5.png" width="60px" alt="" /></a><!-- patreon-->

Generated by panvimdoc <https://github.com/kdheepak/panvimdoc>

vim:tw=78:ts=8:noet:ft=help:norl:

You might also like