A minimalist Neovim plugin that auto pairs & closes brackets written in 100% Lua.
Most functions work in both insert and command-line mode.
(works in <BS>
and <C-W>
)
(works in <CR>
and <S-CR>
, only in insert mode)
Plug 'm4xshen/autoclose.nvim'
use 'm4xshen/autoclose.nvim'
init.lua
.
require("autoclose").setup()
You can pass your config table into the setup()
function.
The available options in keys
:
close
: If set to true, pressing the character will insert both the opening and closing characters, and place the cursor in between them.escape
: If set to true, pressing the character again will escape it instead of inserting a closing character.pair
: The string that represents the pair of opening and closing characters. This should be a two-character string, with the opening character first and the closing character second.disabled_filetypes
: Table of filetypes where the specific key should not be autoclosed.enabled_filetypes
: Only autoclose the key under these filetypes. This option takes precedence over disabled_filetypes
.disable_command_mode
: If set to true, the character will be disabled in command-line mode.Example: Add a $$
pair.
require("autoclose").setup({
keys = {
["$"] = { escape = true, close = true, pair = "$$", disabled_filetypes = {} },
},
})
You can also overwrite the default config.
Example: Remove the escape function of >
.
require("autoclose").setup({
keys = {
[">"] = { escape = false, close = false, pair = "<>", disabled_filetypes = {} },
},
})
The available options in options
:
disabled_filetypes
: The plugin will be disabled under the filetypes in this table.
{ "text" }
Example: Disable the plugin in text and markdown file.
require("autoclose").setup({
options = {
disabled_filetypes = { "text", "markdown" },
},
})
disable_when_touch
: Set this to true will disable the auto-close function when the cursor touches character that matches touch_regex
.
false
touch_regex
"[%w(%[{]"
(alphanumeric characters or (
or [
or {
)Example:
Your current file: ( ^
points to your cursor position)
word
^
You press (
and the file will become
(word
^
It doesn't autoclose for you because your cursor touches w
.
pair_spaces
: Pair the spaces when cursor is inside a pair of keys
.
false
Example:
The |
is your cursor in insert mode.
import {|}
after inserting a space:
import { | }
auto_indent
: Enable auto-indent feature
true
disable_command_mode
: Disable autoclose for command mode globally
false
local config = {
keys = {
["("] = { escape = false, close = true, pair = "()" },
["["] = { escape = false, close = true, pair = "[]" },
["{"] = { escape = false, close = true, pair = "{}" },
[">"] = { escape = true, close = false, pair = "<>" },
[")"] = { escape = true, close = false, pair = "()" },
["]"] = { escape = true, close = false, pair = "[]" },
["}"] = { escape = true, close = false, pair = "{}" },
['"'] = { escape = true, close = true, pair = '""' },
["'"] = { escape = true, close = true, pair = "''" },
["`"] = { escape = true, close = true, pair = "``" },
},
options = {
disabled_filetypes = { "text" },
disable_when_touch = false,
touch_regex = "[%w(%[{]",
pair_spaces = false,
auto_indent = true,
disable_command_mode = false,
},
}
autoclose.nvim
vs other pluginsSome plugins such as nvim-autopairs
and ultimate-autopair.nvim
provide a wider range of features such as fast wrap, treesitter pair checking, etc., but some users may not need all of them. If you just want the basic functionality of editing with pairs, you can use autoclose.nvim to achieve the same thing in a simpler and faster way.