VIMで追加のスペースと固定長の列を強調表示する

VIMで追加のスペースと固定長の列を強調表示する

VIMを使用して、余分なスペースと固定長列(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バリエーションが存在する。次のいずれかを使用します。

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

matchadd()Vimscript機能を使用して別のバリエーションを作成できます。

ノート

  • '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()

関連情報