Vimの検索ハイライトを消す(:nohlsearch)といちいち消さない設定
検索を終えたのに画面のあちこちがハイライトされたままで、地味に目障りに感じます。hlsearchを有効にしている環境ではよくあることで、これを一発で消すコマンドがあります。
| コマンド | これだけ覚える |
|---|---|
:nohlsearch / :noh | 今のハイライトだけを一時的に消す |
nnoremap <Esc> :nohlsearch<CR> | Escを押すたびに自動で消す |
set nohlsearch | ハイライトそのものを無効化する |
ハイライトを消す
:nohlsearch
省略形の:nohでも同じように動きます。「No Highlight」の頭文字だと覚えておくと分かりやすいです。実行してもハイライトが消えるだけで、検索履歴やカーソル位置には影響しません。
毎回コマンドを打つのが面倒なら
nnoremap <Esc> :nohlsearch<CR>
Escキーにマッピングしておくと、検索後に何か他の操作をしようとしてEscを押した瞬間にハイライトも一緒に消えます。Escは元々ノーマルモードでは大きな副作用を持たないキーなので、上書きしても困る場面はほとんどありません。
ハイライトは次の検索で自動的に復活する
:nohで消したハイライトは、恒久的に無効化されるわけではありません。次に/や*で検索すると、また自動的にハイライトが表示されます。あくまで「今のハイライトだけを一時的に消す」コマンドだと理解しておくと、動作の予測がしやすくなります。
そもそもハイライト自体が不要な場合
set nohlsearch
検索結果のハイライト自体を最初から不要と感じるなら、この設定でそもそも有効にしないという選択もできます。ただし複数箇所ある同じ単語を目視で確認したい場面ではハイライトが便利なことも多いので、無効にするか、こまめに消す運用にするかは好みが分かれるところです。
:nohを使います。頻繁に消すならEscキーへのマッピングが手軽で、そもそも要らないならhlsearch自体を切ってしまう手もあります。
:nohをコマンドラインで打つのが面倒で、しばらくハイライトを有効にしたまま我慢していた時期があります。Escにマッピングしてからは、検索を終えて次の操作に移る自然な流れの中でハイライトが消えるようになり、意識する必要すらなくなりました。
他のマッピングと衝突しないか確認する
Escキーへのマッピングを追加する前に、すでにプラグインなどでEscに別の処理を割り当てていないか確認しておくと安心です。複数のマッピングが同じキーを取り合うと、意図しないほうが優先されて混乱の元になります。既存の設定を一通り確認してから追加するのが安全です。プラグインを多用している環境ほど、こうしたキーの取り合いは起きやすいので、導入後は一度:verbose map <Esc>のようなコマンドで割り当て状況を確認しておくと確実です。既存のマッピングが表示されれば、そこに追記する形で自分の処理を継ぎ足すこともできます。何も表示されなければ、安心してそのまま新規に割り当てて構いません。この一手間を惜しまないだけで、あとから原因不明の動作不良に悩まされるリスクをかなり減らせます。
まとめ
検索ハイライトが煩わしいときは:nohで即座に消せます。頻度が高いならEscキーへのマッピングで自動化してしまうと快適です。