如何在Vim中更改特定行号颜色
我想这样做已经有一段时间了,有时当我打开一个文件时,我希望能够以不同的颜色突出显示某些行号。例如,假设我的LineNr为蓝色,而我当前的LineNr为红色。假设我在第25行,我是否可以在不离开当前行的情况下将第28-30行的LineNr颜色更改为绿色?作为一个快速回答,如果您不介意一次最多按8个对齐的组高亮显示,您可以使用如何在Vim中更改特定行号颜色,vim,vim-plugin,vim-syntax-highlighting,Vim,Vim Plugin,Vim Syntax Highlighting,我想这样做已经有一段时间了,有时当我打开一个文件时,我希望能够以不同的颜色突出显示某些行号。例如,假设我的LineNr为蓝色,而我当前的LineNr为红色。假设我在第25行,我是否可以在不离开当前行的情况下将第28-30行的LineNr颜色更改为绿色?作为一个快速回答,如果您不介意一次最多按8个对齐的组高亮显示,您可以使用matchaddpos({group},{pos})函数并创建一个命令,将高亮显示组应用于一系列行 command! -range -nargs=1 -complete=hig
matchaddpos({group},{pos})
函数并创建一个命令,将高亮显示组应用于一系列行
command! -range -nargs=1 -complete=highlight HiLine call matchaddpos(<f-args>, range(<line1>,<line2>))
请注意,补全适用于突出显示组的参数
要删除先前高亮显示的一组线,可以删除包含特定线的线。我找不到比检查所有getmatches()
dicts和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('.'))
在正常模式下键入[count]hi
将突出显示光标上的count
行。而[count]hc
将删除行组count
上的突出显示
补遗
我们可以使用matchadd({group},{pattern})
在更大范围内工作,使用\%xl
匹配行x
。将调用matchaddpos(…
替换为
execute 'call matchadd(<f-args>, ''\%'.<line1>.'l\(.*\n\)\+\%'.(<line2>+1).'l'')'
execute'callmatchadd(,'\%'..'l\(.*\n\)\+\%.(+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]
让l:a=matchlist(get(l:match,'pattern','','^\\\%\(\d\+\)l.\\\%\(\d\+\)l$)
如果!为空(l:a)&&l:a[1]您可能希望显示使用范围为OP@D.BenKnoble对,已编辑。您知道为什么正则表达式匹配不能很好地用于长范围吗?例如:%HiLine…
在缓冲区的中间部分不能很好地工作,或者在顶部,它突出显示当前视图,但向下移动,没有突出显示任何内容,等等…可能是短的再次使用正则表达式来突出显示
execute 'call matchadd(<f-args>, ''\%'.<line1>.'l\(.*\n\)\+\%'.(<line2>+1).'l'')'
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]