VIM 高亮去除覆盖其他 hi

3
我在我的 ~/.vimrc 中使用以下代码来解决长行问题:此处链接
augroup longLines                                                                                   
     au!
     au! filetype zsh,sh,python,vim,c,cpp
         \ syn match ColorColumn /\%>80v.\+/ containedin=ALL
 augroup END 

但这将覆盖其他syn,具体如下:

ss

没有这个问题的情况:

ss

为什么syn会覆盖其他高亮显示?
这在最后一行中是臭名昭著的。

 sys.exit(1)
 import settings

颜色不同,使用syn后,行失去了正常的高亮显示。


2
嗯,好的……有什么问题吗? - Rook
vim7.3 中,我使用 :set cc=80 - kev
@kev 我不喜欢 cc 很丑,总是显示第80列,我的 syn 只有当行超过80个字符时才显示。 - JuanPablo
@ldigas,问题是为什么syn会覆盖其他的hi - JuanPablo
你可以用 下划线 来突出显示。 - kev
2个回答

2
我使用以下代码:
highlight TooLongLine term=reverse ctermfg=Yellow ctermbg=Red
autocmd BufEnter,WinEnter * if &tw && !exists('b:DO_NOT_2MATCH') |
            \                 execute '2match TooLongLine /\S\%>'.(&tw+1).'v/' |
            \               endif
autocmd BufLeave,WinLeave * 2match

command -nargs=0 -bar Dm let b:DO_NOT_2MATCH=1 | 2match
command -nargs=0 -bar Sm execute '2match TooLongLine /\S\%>'.(&tw+1).'v/' |
            \            silent! unlet b:DO_NOT_2MATCH

如果您不想取消此高亮显示,依赖于textwidth并坚持突出显示超出限制的空格,则可以将其缩短为:
2match TooLongLine /.\%>80v/

这个解决方案使用match-highlight,它不会破坏语法高亮,但总是覆盖它。


0

我知道你之前问过这个问题,但如果其他人也有同样的问题,也许你可以尝试使用matchadd()函数,像这样:

hi def longLine gui=reverse    "or guibg=pink, or whatever you prefer
augroup longLines
    au!
    au! filetype zsh,sh,python,vim,c,cpp
                \ call matchadd("longLine", "\\%>80v", 0, 9999)
augroup END

最重要的是,请确保您不设置任何高亮组的guifg,以免覆盖语法突出显示。

另一个对我至关重要的部分是使用matchadd,并将0作为第三个参数,这样您的搜索突出显示仍然有效,并且不会被长行突出显示取代。

第四个参数可以省略。它只是一个常数,以便您稍后可以轻松地:call matchdelete(9999)删除突出显示。

请参阅:h matchadd:h matchdelete


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