
Я хочу выделить лишние пробелы и столбцы фиксированной длины (например, 80 символов в строке) с помощью VIM
Я создал два правила vimrc в своем .vimrc
файле
highlight ExtraWhitespacea ctermbg=darkred guibg=#382424
match ExtraWhitespacea /\s\+$/
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
Проблема в том, что эти правила работают именно так, как мне нужно, если их применять по отдельности, но вместе они работать не будут.
Я что-то упустил? Как это исправить?
решение1
Проблема в том, что каждая :match
команда переопределяет шаблон предыдущей; они не являются кумулятивными! Из-за этого существуют :2match
и :3match
варианты. Используйте один из них:
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
highlight OverLength ctermbg=red guibg=#525252
2match OverLength /\%81v.\+/
Дополнительные варианты можно создать с помощью matchadd()
функции Vimscript.
Примечания
- Начиная с версии Vim 7.3 появилась встроенная
'colorcolumn'
опция, позволяющая выделять столбцы. - Ваша настройка
~/.vimrc
работает только для самого первого окна; т.е. a:split
создаст окно, которое не будет иметь этих выделений. Вы можете исправить это через autocmds (или с помощью опции'colorcolumn'
). - Существуют более надежные и сложные решения для выделения конечных пробелов, например, мойПлагин ShowTrailingWhitespace. (На странице плагина есть ссылки на альтернативные плагины.)
решение2
Возможно, ваша цветовая схема переопределила вашу конфигурацию. Вы можете добавить эти строки в конец, .vimrc
чтобы предотвратить переопределение, или просто добавьте эти строки в свой .vimrc
:
" Highlight trailing white spaces
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
" Highlight long lines
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
autocmd BufWinEnter * match OverLength /\%81v.\+/
autocmd InsertEnter * match OverLength /\%81v.\+/
autocmd InsertLeave * match OverLength /\%81v.\+/
autocmd BufWinLeave * call clearmatches()