如何让vim语法高亮整个行?

12
我希望vim可以突出显示匹配特定模式的整行。我可以通过执行syn match MyMatch "^.*text-to-match.*$"来使一行中的所有文本都高亮,但它总是在文本的末尾停止。我希望能够继续到术语的结尾,就像突出显示CursorLine一样。
我尝试将$替换为\n^,希望它会环绕。但没有变化。(我实际上并不指望这会起作用,但试一试也无妨。)我还尝试调整syn-pattern-offset(我在这里阅读了相关信息:http://vimdoc.sourceforge.net/htmldoc/syntax.html#:syn-pattern)。长话短说,添加he=he-5将减少5个字符的高亮,但he=he+5不会显示任何额外的字符,因为没有要高亮的字符。
这是我制作vim语法的第一次尝试,我对vim相对较新。请温柔些,并包含解释。
谢谢!
(编辑:忘记提到,这是多行突出显示。这可能会增加一些复杂性。)

你的模式应该是 ^.*text-to-match.*$ 吗? - Cascabel
Jefromi,就是这样。SO 显然使用包装的星号来表示斜体。现在已经修复了。 - valadil
没有其他语法,但很可能我的语法正在自我破坏。也许我应该从我想要完全突出的行开始,然后在那个工作正常后再写其余部分? - valadil
1
哦,我完全把“整行”读成了“整行文本”。我怀疑实际上没有办法做到这一点。 - Cascabel
我也在寻找同样的东西,实际上,去掉 ^ 和 $ 对我也有效。 - Rhubarb
3个回答

15

这种方法并不是很灵活,因为需要明确标识文件名(缓冲区)和行号才能实现整行高亮,但显然sign命令可以解决:

可以使用:sign机制来高亮整行。
可以在:help sign-commands中找到示例。
简而言之:

:sign define wholeline linehl=ErrorMsg
:sign place 1 name=wholeline line=123 file=thisfile.txt

显然,你应该选择一个可以改变linehl参数背景颜色的高亮组。

来源:Erik Falor,vim邮件列表


1
你可以通过这种方式将整行背景突出显示,但是文本将失去其语法高亮。 - Andy Stewart

10

syn-pattern的文档中可以看到:

高亮区域将不会超出匹配到的文本范围。

如果你真能让这个工作起来,我会感到很惊讶,但回头看看,Vim总是充满了惊喜。


是的,但是模式匹配整行。它应该突出显示整行。 - Cascabel
2
如果窗口宽度为80个字符,而文本只有4个字符,则只匹配这4个字符并仅高亮这4个字符。原帖作者希望所有80列都被高亮显示。 - Jay
2
Jay是正确的。使用标准语法高亮选项无法模拟“cursorline”的行为。语法高亮只是用于突出显示现有文本。 - jamessan
很不幸,但这也解释了为什么我无法弄清楚它的原因 :-P - valadil

0

你也可以尝试以下命令: :set cursorline :set cursorcolumn 通过以下命令更改颜色: :hi cursorline :hi cursorcolumn 使用通常的 term=、ctermfg=、ctermbg= 等参数 参见此答案 VIM Highlight the whole current line


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接