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