mirror of
https://github.com/junegunn/vim-easy-align.git
synced 2025-11-08 09:53:51 -05:00
Resolve syntax highlighting group in neovim/treesitter (#160)
Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
This commit is contained in:
15
README.md
15
README.md
@@ -406,7 +406,7 @@ highlighted as code comments or strings are ignored.
|
|||||||
```vim
|
```vim
|
||||||
" Default:
|
" Default:
|
||||||
" If a delimiter is in a highlight group whose name matches
|
" If a delimiter is in a highlight group whose name matches
|
||||||
" any of the followings, it will be ignored.
|
" any of the following regular expressions, it will be ignored.
|
||||||
let g:easy_align_ignore_groups = ['Comment', 'String']
|
let g:easy_align_ignore_groups = ['Comment', 'String']
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -463,6 +463,19 @@ If a pattern in `ignore_groups` is prepended by a `!`, it will have the opposite
|
|||||||
meaning. For instance, if `ignore_groups` is given as `['!Comment']`, delimiters
|
meaning. For instance, if `ignore_groups` is given as `['!Comment']`, delimiters
|
||||||
that are *not* highlighted as Comment will be ignored during the alignment.
|
that are *not* highlighted as Comment will be ignored during the alignment.
|
||||||
|
|
||||||
|
To make `ignore_groups` work, and to debug the related issues, it is useful to
|
||||||
|
know which highlight group a certain location in a file belongs to. A special
|
||||||
|
function exists for this purpose, returning exactly the name of the highlight
|
||||||
|
group that is used by the easy align plugin.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Highlight group name of the cursor position
|
||||||
|
echo easy_align#get_highlight_group_name()
|
||||||
|
|
||||||
|
" Highlight group name of the line 10, column 20
|
||||||
|
echo easy_align#get_highlight_group_name(10, 20)
|
||||||
|
```
|
||||||
|
|
||||||
### Ignoring unmatched lines
|
### Ignoring unmatched lines
|
||||||
|
|
||||||
`ignore_unmatched` option determines how EasyAlign command processes lines that
|
`ignore_unmatched` option determines how EasyAlign command processes lines that
|
||||||
|
|||||||
@@ -89,9 +89,30 @@ function! s:floor2(v)
|
|||||||
return a:v % 2 == 0 ? a:v : a:v - 1
|
return a:v % 2 == 0 ? a:v : a:v - 1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:get_highlight_group_name(line, col)
|
||||||
|
let hl = synIDattr(synID(a:line, a:col, 0), 'name')
|
||||||
|
|
||||||
|
if hl == '' && has('nvim-0.9.0')
|
||||||
|
let insp = luaeval('vim.inspect_pos and vim.inspect_pos( nil, ' .. (a:line-1) .. ', ' .. (a:col-1) .. ' ) or { treesitter = {} }')
|
||||||
|
if !empty(insp.treesitter)
|
||||||
|
let hl = insp.treesitter[0].hl_group_link
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" and, finally
|
||||||
|
return hl
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! easy_align#get_highlight_group_name(...)
|
||||||
|
let l = get(a:, 1, line('.'))
|
||||||
|
let c = get(a:, 2, col('.'))
|
||||||
|
let hl = s:get_highlight_group_name(l, c)
|
||||||
|
return { 'line': l, 'column': c, 'group': hl }
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:highlighted_as(line, col, groups)
|
function! s:highlighted_as(line, col, groups)
|
||||||
if empty(a:groups) | return 0 | endif
|
if empty(a:groups) | return 0 | endif
|
||||||
let hl = synIDattr(synID(a:line, a:col, 0), 'name')
|
let hl = s:get_highlight_group_name(a:line, a:col)
|
||||||
for grp in a:groups
|
for grp in a:groups
|
||||||
if grp[0] == '!'
|
if grp[0] == '!'
|
||||||
if hl !~# grp[1:-1]
|
if hl !~# grp[1:-1]
|
||||||
@@ -1146,3 +1167,4 @@ endfunction
|
|||||||
let &cpo = s:cpo_save
|
let &cpo = s:cpo_save
|
||||||
unlet s:cpo_save
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: set et sw=2 :
|
||||||
|
|||||||
@@ -517,7 +517,7 @@ highlighted as code comments or strings are ignored.
|
|||||||
>
|
>
|
||||||
" Default:
|
" Default:
|
||||||
" If a delimiter is in a highlight group whose name matches
|
" If a delimiter is in a highlight group whose name matches
|
||||||
" any of the followings, it will be ignored.
|
" any of the following regular expressions, it will be ignored.
|
||||||
let g:easy_align_ignore_groups = ['Comment', 'String']
|
let g:easy_align_ignore_groups = ['Comment', 'String']
|
||||||
<
|
<
|
||||||
For example, the following paragraph
|
For example, the following paragraph
|
||||||
@@ -567,6 +567,17 @@ opposite meaning. For instance, if `ignore_groups` is given as `['!Comment']`,
|
|||||||
delimiters that are not highlighted as Comment will be ignored during the
|
delimiters that are not highlighted as Comment will be ignored during the
|
||||||
alignment.
|
alignment.
|
||||||
|
|
||||||
|
To make `ignore_groups` work, and to debug the related issues, it is useful to
|
||||||
|
know which highlight group a certain location in a file belongs to. A special
|
||||||
|
function exists for this purpose, returning exactly the name of the highlight
|
||||||
|
group that is used by the easy align plugin.
|
||||||
|
>
|
||||||
|
" Highlight group name of the cursor position
|
||||||
|
echo easy_align#get_highlight_group_name()
|
||||||
|
|
||||||
|
" Highlight group name of the line 10, column 20
|
||||||
|
echo easy_align#get_highlight_group_name(10, 20)
|
||||||
|
<
|
||||||
|
|
||||||
< Ignoring unmatched lines >__________________________________________________~
|
< Ignoring unmatched lines >__________________________________________________~
|
||||||
*easy-align-ignoring-unmatched-lines*
|
*easy-align-ignoring-unmatched-lines*
|
||||||
|
|||||||
@@ -140,3 +140,4 @@ vnoremap <silent> <Plug>(EasyAlignRepeat) :<C-U>call <SID>repeat_in_visual()<Ent
|
|||||||
" Backward-compatibility (deprecated)
|
" Backward-compatibility (deprecated)
|
||||||
nnoremap <silent> <Plug>(EasyAlignOperator) :set opfunc=<SID>easy_align_op<Enter>g@
|
nnoremap <silent> <Plug>(EasyAlignOperator) :set opfunc=<SID>easy_align_op<Enter>g@
|
||||||
|
|
||||||
|
" vim: set et sw=2 :
|
||||||
|
|||||||
Reference in New Issue
Block a user