Neovim Lua plugin to automatically manage character pairs. Part of 'mini.nvim' library.
Minimal and fast autopairs
See more details in Features and Documentation.
[!NOTE]
This was previously hosted at a personal echasnovski GitHub account. It was transferred to a dedicated organization to improve long term project stability. See more details here.
โฆฟ This is a part of mini.nvim library. Please use this link if you want to mention this module.
โฆฟ All contributions (issues, pull requests, discussions, etc.) are done inside of 'mini.nvim'.
โฆฟ See whole library documentation to learn about general design principles, disable/configuration recipes, and more.
โฆฟ See MiniMax for a full config example that uses this module.
If you want to help this project grow but don't know where to start, check out contributing guides of 'mini.nvim' or leave a Github star for 'mini.nvim' project and/or any its standalone Git repositories.
Demo
https://user-images.githubusercontent.com/24854248/173044991-18653715-9b4e-444e-a4ba-14eb80bc4e38.mp4
Features
- Functionality to work with two "paired" characters conditional on cursor's neighborhood (character to its left and character to its right).
- Usage should be through making appropriate mappings using
MiniPairs.map()or inMiniPairs.setup()(for global mapping),MiniPairs.map_buf()(for buffer mapping). - Pairs get automatically registered for special
<BS>(all configured modes) and<CR>(only Insert mode) mappings. Pressing the key inside pair will delete whole pair and insert extra blank line inside pair respectively. Note: these mappings are autocreated if they do not override existing ones.
Installation
This plugin can be installed as part of 'mini.nvim' library (recommended) or as a standalone Git repository.
There are two branches to install from:
main(default, recommended) will have latest development version of plugin. All changes since last stable release should be perceived as being in beta testing phase (meaning they already passed alpha-testing and are moderately settled).stablewill be updated only upon releases with code tested during public beta-testing phase inmainbranch.
(Recommended) With vim.pack (on Neovim 0.12 and newer)
Full library
Follow 'mini.nvim' installation.
Standalone plugin
Main branch:
vim.pack.add({ 'https://github.com/nvim-mini/mini.pairs' })
Stable branch:
vim.pack.add({
{ src = 'https://github.com/nvim-mini/mini.pairs', version = 'stable' },
})
With mini.deps (before Neovim 0.12)
Full library
Follow recommended 'mini.deps' installation.
Standalone plugin:
Main branch:
add('nvim-mini/mini.pairs')
Stable branch:
add({ source = 'nvim-mini/mini.pairs', checkout = 'stable' })
With folke/lazy.nvim
Full library
Follow 'mini.nvim' installation.
Standalone plugin
Main branch:
{ 'nvim-mini/mini.pairs', version = false },
Stable branch:
{ 'nvim-mini/mini.pairs', version = '*' },
Important: don't forget to call require('mini.pairs').setup() to enable its functionality.
Note: if you are on Windows, there might be problems with too long file paths (like error: unable to create file <some file name>: Filename too long). Try doing one of the following:
- Enable corresponding git global config value:
git config --system core.longpaths true. Then try to reinstall. - Install plugin in other place with shorter path.
Default config
-- No need to copy this inside setup(). Will be used automatically.
{
-- In which modes mappings from this config should be created
modes = { insert = true, command = false, terminal = false },
-- Global mappings. Each right hand side should be a pair information, a -- table with at least these fields (see more in |MiniPairs.map|): -- - <action> - one of 'open', 'close', 'closeopen'. -- - <pair> - two character string for pair to be used. -- By default pair is not inserted after \, quotes are not recognized by -- <CR>, ' does not insert the pair after a letter. -- Only parts of tables can be tweaked (others will use these defaults). mappings = { ['('] = { action = 'open', pair = '()', neigh_pattern = '^[^\\]' }, ['['] = { action = 'open', pair = '[]', neigh_pattern = '^[^\\]' }, ['{'] = { action = 'open', pair = '{}', neigh_pattern = '^[^\\]' },
[')'] = { action = 'close', pair = '()', neigh_pattern = '^[^\\]' }, [']'] = { action = 'close', pair = '[]', neigh_pattern = '^[^\\]' }, ['}'] = { action = 'close', pair = '{}', neigh_pattern = '^[^\\]' },
['"'] = { action = 'closeopen', pair = '""', neigh_pattern = '^[^\\]', register = { cr = false } }, ["'"] = { action = 'closeopen', pair = "''", neigh_pattern = '^[^%a\\]', register = { cr = false } }, [''] = { action = 'closeopen', pair = '`', neigh_pattern = '^[^\\]', register = { cr = false } }, }, }