ターミナル vim で末尾の空白をわかりやすく表示したいです。これにより、ファイルを閉じる前に空白を削除できるようになります。
この質問がかなり人気があるのは承知しており、SO ですでに何十もの回答を見つけました。残念ながら、まだ満足のいく回答は見つかっていません...
そこで、収集した情報と私が見つけた解決策をまとめてみようと思います。
解決策1: 末尾のスペースを手動で強調表示する
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
長所:
- 使いやすい
- 速い
- 互換性あり
cursorline
短所:
- 選択した色は手動で設定されているため、他の配色と互換性がありません。
red
- 大きな赤い背景ブロックはあまり美的ではない
解決策2: リスト機能を使用する
set list
set listchars+=trail:◦
長所:
- 使いやすい
- 速い
短所:
:set cursorline
有効になっている場合の問題- 専用の色は
list/trail
設定できません。他のリスト文字と同じにする必要があります。
解決策3: 非表示機能を使用する
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
長所:
- 最初の解決策よりもきれい
短所:
- 背景はカーソルラインの背景と同じではありません
- 他の隠蔽ルールに干渉する可能性がある
- 選択した色が必ずしも配色と互換性がない
- 古いバージョンのVimとは互換性がありません
私の質問
列挙されたソリューションのうち、パフォーマンスと互換性の点で最も適しているのはどれですか。また、すべての長所を得て、短所を一切排除するにはどうすればよいですか。
言い換えれば、次のような解決策を見つけたいのです。
- ハイライトの末尾の色は選択した配色と一致します
- この色ははっきりと見えますが、目には強すぎません
cursorline
(背景と前景)と互換性があります`- 隠蔽を使用する可能性のある他のプラグインと互換性があります
- 末尾の文字は任意のUnicode文字に設定できます
答え1
パフォーマンスの点では、これらはどれも違いを生まないはずです。Vim は複雑な構文パターンによって動作が遅くなることが多いのですが、ここでのパターンは非常に単純です。
ハイライト カラーを選択したカラー スキームと一致させるには、:hi link
既存のグループに を使用します。通常は になりますError
。もちろん、これは (まったく異なる) カラー スキームを頻繁に切り替える場合にのみ重要です。それ以外の場合は、適切な色を直接使用しても問題ありません (ソリューション 1 のように)。
解決策1: 末尾のスペースを手動で強調表示する
私はこれを選びますが、matchadd()
の代わりにを使用する:match
と、後者はカスタムハイライトに残されます。また、clearmatches()
は粗すぎます。全て一致するため、プラグインに影響を与える可能性があります。私のShowTrailingWhitespace プラグインクリーンで強力な実装 (特定のファイルタイプの例外も含む) を実現します。確かに、これははるかに大きなソリューションですが、まだ影響は感じられません。
解決策2: リスト機能を使用する
これはそれ自体便利な機能ですが、これを永続的にオンにしておくと、タブ文字のカーソル位置に影響が出るため、お勧めしません。
解決策3: 非表示機能を使用する
それは、その機能を使用する一部の構文やプラグインに確実に干渉するでしょう。悪い考えです。