Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim每N行突出显示一次编号?_Vim_Colors_Highlight_Line Numbers - Fatal编程技术网

Vim每N行突出显示一次编号?

Vim每N行突出显示一次编号?,vim,colors,highlight,line-numbers,Vim,Colors,Highlight,Line Numbers,我在Vim中的行号是蓝色(背景)和白色(前景),但这不是很清楚,尤其是对于大型文件 我希望每五行代码的背景颜色为深蓝色,每十行代码的前景颜色为红色,这样就可以轻松区分5行和10行代码,而无需计数或关注行编号 我怎样才能做到这一点?不幸的是,我没有发现任何插件可以这样做。您不能在行号列上进行不同的hl(突出显示)。但是,您可以以某种方式突出显示行中的文本。但我想这不是你想要的,你只是想在行号栏上看到一些标记/突出显示。然后,符号可能最接近您的要求 源代码:(我只是随机挑选颜色,你可以随意调整) h

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

我希望每五行代码的背景颜色为深蓝色,每十行代码的前景颜色为红色,这样就可以轻松区分5行和10行代码,而无需计数或关注行编号


我怎样才能做到这一点?不幸的是,我没有发现任何插件可以这样做。

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

源代码:(我只是随机挑选颜色,你可以随意调整)

hi FIF组术语=粗体字符制造=红色
hi TenGroup term=bold ctermbg=darkgreen
符号定义第五个文本HL=FIFF组文本=->
符号定义文本hl=t组文本=>>
有趣!PlaceLineSign()
对于范围内的i(1+行(“$”)
如果i=~'5$'
执行'sign place'.i.'line='.i.'name=fifth buffer='.bufnr('%'))
恩迪夫
如果i=~'0$'&&i>0
执行“sign place”.i.“line=”.i.“name=tenth buffer=”.bufnr(“%”)
恩迪夫
外循环
endf
有趣!RemoveLineSign()
签名取消位置*
endf
nnoremap:调用PlaceLineSign()
nnoremap:调用RemoveLineSign()
然后,您可以按
显示这些标志,按
隐藏这些标志

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

它看起来像:


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

源代码:(我只是随机挑选颜色,你可以随意调整)

hi FIF组术语=粗体字符制造=红色
hi TenGroup term=bold ctermbg=darkgreen
符号定义第五个文本HL=FIFF组文本=->
符号定义文本hl=t组文本=>>
有趣!PlaceLineSign()
对于范围内的i(1+行(“$”)
如果i=~'5$'
执行'sign place'.i.'line='.i.'name=fifth buffer='.bufnr('%'))
恩迪夫
如果i=~'0$'&&i>0
执行“sign place”.i.“line=”.i.“name=tenth buffer=”.bufnr(“%”)
恩迪夫
外循环
endf
有趣!RemoveLineSign()
签名取消位置*
endf
nnoremap:调用PlaceLineSign()
nnoremap:调用RemoveLineSign()
然后,您可以按
显示这些标志,按
隐藏这些标志

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

它看起来像:


您可以使用我的DynamicSigns插件。它定义了一个SignExpression命令,其工作原理与foldexpression类似。在您的情况下,您可以简单地执行以下操作:

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

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

您可以使用我的DynamicSigns插件。它定义了一个SignExpression命令,其工作原理与foldexpression类似。在您的情况下,您可以简单地执行以下操作:

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

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

我也在考虑同样的问题,但不幸的是,没有简单的方法可以做到这一点(除非像其他答案所建议的那样使用sign支持,但代价是速度减慢)


vim固有的最佳接近点是LinenRaper/Lower。然而,它是在vim源代码中定义的:它应该很容易扩展到突出显示组,比如每个第k条相对线,但我认为在可预见的将来它不会包含在vim中。我相信这是唯一可用的选项,因为评估是在vim内核中完成的,这比在vim脚本中完成要快。

我也在考虑同样的事情,但不幸的是,没有简单的方法来完成它(除非像其他答案所建议的那样使用符号支持,以降低速度为代价)


vim固有的最佳接近点是LinenRaper/Lower。然而,它是在vim源代码中定义的:它应该很容易扩展到突出显示组,比如每个第k条相对线,但我认为在可预见的将来它不会包含在vim中。我相信这是唯一可用的选项,因为评估是在vim core中完成的,这比在vim脚本中完成要快。

非常感谢!:)我已经映射了F7,如何在F6上切换此功能?(我喜欢切换功能来保存热键)非常感谢!:)我已经映射了F7,如何在F6上切换此功能?(我喜欢切换功能来保存热键)可能还需要查看相对行号,
:h'rnu'
可能还需要查看相对行号,
:h'rnu'