VIM で余分な空白と固定長の列を強調表示する

VIM で余分な空白と固定長の列を強調表示する

VIMを使用して、余分な空白と固定長の列(たとえば、1行に80文字)を強調表示したい

.vimrc私はファイルに2つの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バリエーションがあります。そのうちの 1 つを使用します。

highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
highlight OverLength ctermbg=red guibg=#525252
2match OverLength /\%81v.\+/

Vimscript 関数を使用して追加のバリアントを作成できますmatchadd()

ノート

  • 'colorcolumn'Vim 7.3 以降では、列の強調表示を有効にする組み込みオプションがあります。
  • での設定は~/.vimrc最初のウィンドウでのみ機能します。つまり、: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()

関連情報