Skip to the content.

icon

vim-matchtag

screenshot screenshot screenshot

Highlight matching tags in any files such as html, xml, js, jsx, vue, svelte.

Installation

How to install - [VundleVim][1] Plugin 'leafOfTree/vim-matchtag' - [vim-pathogen][2] cd ~/.vim/bundle && \ git clone https://github.com/leafOfTree/vim-matchtag --depth 1 - [vim-plug][3] Plug 'leafOfTree/vim-matchtag' - Or manually, clone this plugin to `path/to/this_plugin`, and add it to `rtp` in vimrc set rtp+=path/to/this_plugin

How it works

This plugin finds the matching tag and highlight it. Mainly inspired by vim builtin matchparen using searchpairpos and matchaddpos. Feel free to open an issue or a pull request.

Configuration

Set global variable to 1 to enable or 0 to disalbe. Or a proper value to make it effective. Ex:

let g:vim_matchtag_enable_by_default = 1
let g:vim_matchtag_files = '*.html,*.xml,*.js,*.jsx,*.ts,*.tsx,*.vue,*.svelte,*.jsp,*.php,*.erb,*.astro'
variable description default
g:vim_matchtag_files Enable on these files. See ^
g:vim_matchtag_enable_by_default Enable by default. 1
g:vim_matchtag_highlight_cursor_on Highlight the tag when the cursor is on it. 0
Mappings / Performance / debug related    
g:vim_matchtag_mapping_toggle Key mapping to toggle highlighting. ''
g:vim_matchtag_mapping_toggle_highlight_cursor_on Key mapping to toggle highlight_cursor_on. ''
g:vim_matchtag_skip Syntax to skip. See +
g:vim_matchtag_skip_except Syntax not to skip. See +
g:vim_matchtag_timeout The search stops after timeout milliseconds. 50
g:vim_matchtag_disable_cache Disable the cache for lines.
(By default the lines are cached until text changed)
0
g:vim_matchtag_debug Echo debug messages. 0

Note

Highlighting

When the matching tag is found, the highlight group is matchTag (by default Visual). Otherwise, it’s matchTagError (by default Error).

You could change them as follows.

highlight link matchTag Search
highlight link matchTag MatchParen
highlight matchTag gui=reverse

highlight link matchTagError Todo

If these don’t take effect, try putting them at the end of your vimrc.

Commands

There are commands you can call directly or add key mapping to.

Performance

The highlighting should take about 0.001~0.01 depending on the file content. If there is a freeze, you can try

let g:vim_matchtag_skip = '<pattern>'         " Syntax to skip
let g:vim_matchtag_skip_except = '<pattern>'  " Syntax not to skip

call matchtag#ReportTime()

and feel free to open an issue.

You can show the syntax stack under the cursor by running

echo map(synstack(line('.'), col('.')), { _, id -> synIDattr(id, 'name') })

Others

Credits