我想这样做已经有一段时间了,有时当我打开一个文件时,我希望能够以不同的颜色突出显示某些行号。例如,假设我的线路编号是蓝色,而我的当前线路编号是红色。假设我在第 25 行,我是否可以将第 28-30 行的 LineNr 颜色更改为绿色而不离开当前行?
最佳答案
作为一个快速回答,如果您不介意一次仅突出显示最多 8 个法格,您可以使用 matchaddpos({group}, {pos})
函数并创建一个命令来应用 highlight
分组到一系列行。
command! -range -nargs=1 -complete=highlight HiLine call matchaddpos(<f-args>, range(<line1>,<line2>))
您可以使用它,例如突出显示为 'cursorline'
:
:28,30HiLine CursorLine
请注意,补全适用于突出显示组的参数。
要删除先前突出显示的行组,您可以删除包含特定行的行。我找不到比遍历所有 getmatches()
更简单的方法听写和 matchdelete({id})
包含 'posX'
之一上的行的那些关键:
function! s:RemoveMatchOnLine(line) abort
for l:match in getmatches()
let l:matchlines = values(filter(copy(l:match), 'v:key =~# ''pos\d\+'''))
if index(l:matchlines, [a:line]) >= 0
call matchdelete(l:match['id'])
endif
endfor
endfunction
command! -nargs=? LoLine call <SID>RemoveMatchOnLine(<q-args> ? <q-args> : line('.'))
现在,您可以:LoLine
撤消当前行附近行的突出显示,或者您可以给它一个参数来指定另一行,这样您就不必将光标移到那里::LoLine 28
.
最后,您可以设置映射:
nnoremap <leader>hi :HiLine CursorLine<CR>
xnoremap <leader>hi :HiLine CursorLine<CR>
nnoremap <leader>hc :<c-u>execute 'LoLine ' . v:count<CR>
打字 [count]<leader>hi
在正常模式下会突出显示count
从光标开始的行。和[count]<leader>hc
将删除行 count
组上的突出显示.
附录
我们可以使用 matchadd({group}, {pattern})
处理更大的范围,使用\%xl
匹配线 x
。替换call matchaddpos(...
通过
execute 'call matchadd(<f-args>, ''\%'.<line1>.'l\(.*\n\)\+\%'.(<line2>+1).'l'')'
以及函数的第 2 行和第 3 行
let l:a = matchlist(get(l:match,'pattern',''), '^\\%\(\d\+\)l.*\\%\(\d\+\)l$')
if !empty(l:a) && l:a[1] <= a:line && a:line <= l:a[2]
但对我来说,它会在大范围内中断,我更喜欢第一个看起来更强大的解决方案。
关于vim - 如何更改 Vim 中特定行号的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466120/