Vim,分割窗口破坏了长度高亮。

4
我在我的 .vimrc 文件中设置了以下内容,以便突出显示超过 80 个字符的行。
highlight OverLength ctermbg=darkred ctermfg=darkred guibg=darkred
match OverLength /\%>80v.\+/

如果我打开一行太长的文件,它们会被突出显示。但是,如果我打开另一个文件,然后使用NERDTree打开原始文件的vsplit,那么长行将不再突出显示。我做错了什么?
编辑:我正在GNU / Linux上使用gvim。
编辑:在您在分割符中打开原始文件后,直到重新启动vim并在单个缓冲区中打开文件之前,长行都不会为任何文件突出显示。

匹配是针对特定窗口的。 - jthill
我不确定我是否理解正确,但只要你不打开分屏,你可以打开任何文件并且语法高亮仍然有效。一旦打开分屏,整个编辑器就会出问题。 - anon
这是因为拆分窗口上没有设置任何匹配项。匹配项是特定于窗口的。 - jthill
1个回答

8
:match 命令只适用于当前窗口。因此,任何 :split 都不会继承高亮显示。这在 :help :match 中有详细说明:
  Define a pattern to highlight in the current window.

您可以通过:autocmd自动安装与任何窗口匹配的内容:

autocmd VimEnter,WinEnter * match OverLength /\%>80v.\+/

我建议你切换到Vim 7.3+中可用的'colorcolumn'设置,它仅突出显示单个列(并且适用于较短的行),但是你可以在~/.vimrc中简单地:set colorcolumn=81,然后应用于所有窗口,并且你可以保留其他用途的:match高亮。


如果他(就像我一样)不想突出显示所有行,只想突出显示过长的行,他可以使用matchadd()函数,如下所示:hi OverLength ctermbg=darkred guibg=darkred call matchadd('OverLength', '\%>80v.\+') - linluk
@linluk:关于仅突出显示长行的良好输入,我在我的答案中错过了它。不幸的是,matchadd() 也是窗口本地的,所以它也需要 :autocmd(但保持 :match 可供使用)。 - Ingo Karkat
你说得对,我刚刚在帮助文档中查了一下,Defines a pattern to be highlighted in the current window (a "match").(在当前窗口中定义要高亮显示的模式(称为"匹配"))。除了 Gundo 插件、Nerdtree 等,我很少使用窗口,所以我没有考虑过这个问题。但是结合 autocmd WinEnter 使用应该能解决这个问题。(也许可以考虑使用 matchdelete() 来避免重复添加匹配项) - linluk
或许你可以将以下内容添加到你的回答中:augroup mymatches au! au WinEnter * call clearmatches() au WinEnter * call matchadd('Overlength', '\%>80v.\+') augroup END - linluk
这个答案救了我的一天。我到处找,但像往常一样,答案在文档中。 - Tal-Botvinnik

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