выделение vim удалить перезаписать другие привет - PullRequest
3 голосов
/ 31 декабря 2011

Я мой ~ / .vimrc Я использую этот син для длинных строк

augroup longLines                                                                                   
     au!
     au! filetype zsh,sh,python,vim,c,cpp
         \ syn match ColorColumn /\%>80v.\+/ containedin=ALL
 augroup END 

но это перезаписывает другой син, с

сс http://f.cl.ly/items/1n28361h1X3U3J203x2D/ss%202011-12-30_at_22.11.46.png

без

сс http://f.cl.ly/items/1m2H1R1Y3P3i3f0G3U0x/ss%202011-12-30_at_22.19.47.png

Почему syn перезаписывает другие выделения?
это печально известно в последних строках

 sys.exit(1)
 import settings

имеют разные цвета, с син, строки потеряли нормальную подсветку

Ответы [ 2 ]

2 голосов
/ 01 января 2012

Я использую следующий код:

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

Если вы не хотите удалять эту подсветку, зависите от ширины текста и настаиваете на выделении пробелов, выходящих за пределы, то вы можете усечь это до

2match TooLongLine /.\%>80v/

В этом решении используется match-highlight, который не отбрасывает подсветку синтаксиса, но всегда переопределяет его.

0 голосов
/ 23 апреля 2015

Я понимаю, что вы спрашивали об этом довольно давно, но в случае, если другие люди тоже об этом спрашивают, возможно, вы могли бы попробовать использовать вместо этого функцию 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 в качестве третьего параметра, чтобы подсветка поиска оставалась эффективной и не перекрывалась подсветкой longLine.

Четвертый параметр может быть опущен. Это просто константа, так что вы можете :call matchdelete(9999), чтобы легко убрать выделение позже, если хотите.

См. :h matchadd и :h matchdelete

...