Выделение лишних пробелов и столбцов фиксированной длины в VIM

Выделение лишних пробелов и столбцов фиксированной длины в VIM

Я хочу выделить лишние пробелы и столбцы фиксированной длины (например, 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()

Связанный контент