Vim突出显示每个第N行编号?

时间:2014-11-28 16:30:39

标签: vim colors highlight line-numbers

我在Vim中的行号是蓝色(背景)和白色(前景),但这对于大文件来说并不是很清楚。

我希望每个第五行数背景为深蓝色,每十个行数前景为红色,这样就可以轻松区分5到10行代码而无需计算或不必专注于行编号。

我怎样才能实现这一目标?不幸的是我没有找到任何插件这样做..

3 个答案:

答案 0 :(得分:2)

您不能在行号列上进行不同的hl(突出显示)。但是,您可以以某种方式突出显示该行中的文本。但我想这不是你想要的,你只是想在行号列上看到一些标记/突出显示。然后sign可能最接近您的要求。

获取此代码:(我只是随机选择颜色,您可以根据需要调整它们)

hi FifGroup term=bold ctermfg=red 
hi TenGroup term=bold ctermbg=darkgreen 
sign define fifth texthl=FifGroup text=-> 
sign define tenth texthl=TenGroup text=>>
fun! PlaceLineSign()
    for i in range(1+line('$'))
        if i =~ '5$'
            execute 'sign place '.i.' line='.i.' name=fifth buffer='.bufnr('%')
        endif
        if i =~ '0$' && i>0
            execute 'sign place '.i.' line='.i.' name=tenth buffer='.bufnr('%')
        endif
    endfor

endf

fun! RemoveLineSign()
    sign unplace *
endf

nnoremap <F6> <c-u>:call PlaceLineSign()<cr>
nnoremap <F7> <c-u>:call RemoveLineSign()<cr>

然后您可以按<f6>显示这些标记,然后按<F7>隐藏它们。

注意,“符号”存在一个问题,如果您显示符号,并更改行号,即删除/添加新行,则“符号”不会相应更改。但是再次隐藏和显示应该去。

看起来像:

enter image description here

答案 1 :(得分:1)

您可以使用我的DynamicSigns插件。它定义了一个SignExpression命令,其作用类似于foldexpression。在你的情况下,你可以简单地做:

:SignExpression v:lnum%10==0?'Line1':v:lnum%5==0?'Line2':''

使用我的插件的优点是,当您添加或删除行时,它会自动调整行号。注意:根据文件的大小,这可能会降低Vim的速度。但这是一个问题,许多符号插件都有共同之处,因为没有用于访问标志的VimL API。

答案 2 :(得分:0)

我也在考虑同样的事情,但不幸的是没有简单的方法可以做到(除非像其他答案建议的那样使用符号支持,但代价是速度变慢)。

vim 最接近的东西是 LineNrAbove/Below。但是,它是在 vim 源代码中定义的: https://github.com/vim/vim/blob/f3fa18468c0adc4fa645f7c394d7a6d14d3d4352/src/drawline.c#L1156-L1167; 它应该很容易扩展以突出显示每个第 k 个相关行的组,但我认为在可预见的未来它不会包含在 vim 中。我相信这是唯一可用的选项,因为评估是在 vim 内核中完成的,这比在 vim 脚本中进行要快。