A minimalist Neovim plugin that auto closes & renames html/jsx elements without setting keymaps
Caution
Do not lazy load this plugin, it breaks correct initialization order meaning it may not work at all. Plugin is already lazy loaded by default. More info :h lua-plugin-lazy
Tip
After plugin install run :checkhealth ts-autotag to check if parsers are installed correctly
Note
Keymaps are not set by default, you have to set them yourself like so
vim.keymap.set("n", "<leader>rn", function()
-- it returns success status, thus you can fallback like so
if not require("ts-autotag").rename() then
vim.lsp.buf.rename()
end
end)Or you can use a user command :TsTagRename
Note
Feature is not enabled by default, enable with auto_rename.enabled = true
Install with your favorite plugin manager
Calling setup() is optional, only if you want to override default settings,
for example enabling auto live rename
Plugin is lazy loaded by default
Default config
{
opening_node_types = {
-- templ
"tag_start",
-- xml,
"STag",
-- html
"start_tag",
-- jsx
"jsx_opening_element",
},
identifier_node_types = {
-- html
"tag_name",
"erroneous_end_tag_name",
-- xml,
"Name",
-- jsx
"member_expression",
"identifier",
-- templ
"element_identifier",
},
disable_in_macro = true,
-- plugin will be initialized on these filetypes
filetypes = {
"typescript",
"javascript",
"typescriptreact",
"javascriptreact",
"xml",
"html",
"templ",
"php",
},
auto_close = {
enabled = true,
},
auto_rename = {
enabled = false,
closing_node_types = {
-- jsx
"jsx_closing_element",
-- xml,
"ETag",
-- html
"end_tag",
"erroneous_end_tag",
-- templ
"tag_end",
},
},
-- disable plugin on some buffers
should_attach = function(buf) return true end
}- A much more "dumb" and simple solution which just checks child node types under cursor
- Does not override any keymaps,
nvim-ts-autotagoverrides>keymap which could break other plugins


