Vimの最後の検索の強調表示をクリア


1904

Vimで検索を実行すると、すべての出現箇所が強調表示されます。どうすれば無効にできますか?私は今、見つからない意味不明な何かをもう一度検索します。

ハイライトを一時的に無効にして、必要に応じて再度有効にする方法はありますか?


197
私は "nnoremap <esc>:noh <return> <esc>"ソリューションが質問に対するより完全な答えだと思います-.vimrcにそれを置くことで、ハイライトをクリアするために検索した後で<esc>を押すだけです。以前の検索から(ただし、強調表示を無効にしないでください)。
スチュワートジョンソン

5
:set invhlsearchは、既に強調表示されている場合は強調表示を無効にし、強調表示されていない場合は有効にします。Shift-Hと言うようにマップできます。
puffadder

1
私の.vimrcファイルでそれを行う@StewartJohnsonは、:set mouse = aを妨害/中断するようです。何かアイデアはありますか?このエラーはiTerm2でのみ発生します
チャーリーパーカー

20
@StewartJohnson気をつけて!マッピング原因エラーや予期しない動作とあなたの一流のコメントに以下のコメントで説明したようにstackoverflow.com/a/1037182/1698467
skywinder

3
nnoremap <esc> :noh<return><esc>@StewartJohnsonによって提案されたソリューションは、GUI vimの中でうまく動作しますが、矢印キーと他のESCでエンコードされた鍵の端末でVimを実行すると問題が発生します。 あなたの中に入れないでください ~/.vimrcでそれをラップせずにif has('gui_running')... end
jbyler 2017

回答:


1588

次の検索まで強調表示をオフにするには:

:noh

または、強調表示を完全にオフにします。

set nohlsearch

または、それを切り替えるには:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

14
set nohlsearchを実行すると、vimを再起動すると強調表示が戻ります。:nohうまく機能します。
Dharmit 2011

21
:nohと入力するのと同じように、意味不明な文字列/ oajf3w9を検索するのも同じくらい速くなるのは不愉快です。スペースキーを:nohにマッピングする@avocadeのソリューションが好きです
nnyby

160
これは、この回答とコメントからは明確ではありませんset nohlsearch。次の検索でも強調表示が無効になることに注意してください。の動作:nohは大きく異なります。新しい検索を実行したとき、または現在の検索に関連する何かを実行したとき(たとえばn、次の項目に移動するために入力したとき)でも、強調表示は自動的に再度有効になります。
Skippy le Grand Gourou 2012

10
これらが実際に行うこととその結果についての説明はありません。いくつか説明してくれた@SkippyleGrandGourouに感謝します。
Jason S

3
その価値のために、私はこれを'\/'(またはあなたのリーダーが何であれ)マッピングします:map <Leader>/ :nohlsearch<CR>
brianmearns '12 / 08/12

689

VIMドキュメントから

最後に使用した検索パターンをクリアするには:

:let @/ = ""

これはパターンを空の文字列に設定しません。すべての場所に一致するためです。Vimを起動したときのように、パターンは本当にクリアされています。


129
...私が理解しているように、これは彼の問題のより良い解決策です。
Shaun Bouckaert、2009年

8
これは私が探していたものです!私はそれを投票しました、質問は少し曖昧です。これは私がこれが彼が望んでいたものだと私に思わせるようになりました:「私は今、見つけることができない意味不明な何かをもう一度検索します」。それは私が検索をクリアするためにやっていたことですが、それを無効にしていないので、次の検索が再び強調表示されます。
クレイトロン

50
これは私が質問について考えていたものです...ここに私が検索文字列のクリアを高速化するために作成したコマンドがあります(したがってすべてのハイライトを削除します)::command C let @/=""これを使用すると、入力:Cして検索文字列をクリアできます...今後の検索や強調表示には影響しません。
Jason

12
@ jcreamer898、「レジスタ」のvimヘルプを参照してください(:he registers)。Vimにはいくつかの異なる組み込みレジスターがあり、テキストを保持したり、場合によってはヤンクデータ用に、最後に検索したりするために使用します。検索を実行すると、vimはパターンを「/」レジスターに入れます@/。また、はレジスタの名前です。を使用して@regname=value、レジスタに値を割り当てることもできますregname。したがって、@/=""レジスタ「/」を空の文字列に設定するだけです(「/」レジスタの場合、vimは空の文字列が含まれている場合、最後の検索をクリアします)。
ベンデイビス

3
前回の検索をクリアするために/ Ctrlキー+を得るためにあなたの.vimrcにこれを追加します noremap <silent> <c-_> :let @/ = ""<CR>
angrydust

583

できるよ

:noh

または:nohlsearch、次の検索まで一時的に検索の強調表示を無効にします。


3
おかげで、これは役に立ちました...ハイライトを返すためのコマンドはありますか?
ガブリエルソロモン

17
:nohsは現在の強調表示をオフにします。:set hlsearchを実行している場合は、検索が引き続き強調表示されます。
グレイフェード2009年

6
これはOPが探していたものだと思います(ただし、Shaunの回答も機能します)。私はこれを短くするために賛成しています。私は彼がnohlsの回答を受け入れたことを知っていますが、それを設定すると、後で別の検索が試行された場合でも、すべての検索の強調表示が無効になります。
チアゴアライス

5
これはおそらくOPが最初に求めていたものであり、最も短く、最良の回答である。

この定命の領域でも完璧を達成できます!私はこれを:helpより多く使用し、<esc>を汚したくない:nnoremap <F1>:noh <CR>
Sam Watkins

305

私は数年前にvim.orgでこの回答を見つけました:

以下を.vimrcに追加してください:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

したがって、検索後、コマンドモードでReturnキーを押すだけで、強調表示が消えます。


36
これは、実際に受け入れられているソリューションよりもはるかに優れたソリューションだと思います。このソリューション、または<ESC>にマップされている他のソリューションです。
スチュワートジョンソン

20
これは、「nnoremap <esc>:noh <return> <esc>」へのはるかに良い答えです。奇妙な動作を引き起こさないからです。
Dennis

19
注意すべき重要な点として、リマップの右側にコメントを付けないようにしてください。コメントではなく、再マップのコマンドとして解釈されます。
codybuell 2012年

13
コメントが間違っています。このコマンドは、最後の検索パターンの設定を解除せ、現在の結果の強調表示をオフにするだけです。ヒットnして、次の出現箇所を見つけることができます(再び強調表示されます)。ところで、スクリプトを書くときは、省略形を避け、代わりにと書き:nohlsearchます。
トビアス

28
<silent>を追加して、コマンドラインに表示が点滅してnohが残るのを防ぎます-:nnoremap <silent> <CR>:nohlsearch <CR> <CR>
Peter N Lewis

137

http://twitter.com/jonbho/status/2194406821から

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

Vimは内部で特殊キーを表すためにエスケープを使用するため 2行目はエスケープキーへのマッピングに必要です。


12
明確にするために、これによりエスケープキーを押すことで検索の強調表示をクリアできます
Gavin Miller

7
何らかの理由で、これにより、「c」が押されたかのように私の端末vimが起動します。何か案は?
ジェイコブ

31
これを試してみたところ、非常に奇妙な動作が発生しました。起動時に、通常のvimの動き(j、kなど)によって行が削除されていました。nnoremap <CR>:noh <CR> <CR>では、これらの問題は発生しませんでした。根本的な原因を突き止めることができませんでした。
oasisbob 2011

9
うーん、上記と同じ問題がありました。テキストをランダムに削除したい場合を除いて、テストせずにこれをそのまま使用しないでください...
Derek Litz

8
"nnoremap <esc>:noh <return> <esc>"を使用すると、vimは常に "REPLACEMENT"モードで起動します。
user1850133 2014年

38

私の元の解決策(下記)は汚れていて無駄でした。今使っています:noh

Vimの多くの機能と同様に、正しい方法は簡単には見つけられないことがよくあります。

-

(こんなことしないで)

ありそうもない文字シーケンスを検索します(ホーム行のキーをマッシュします)。

/;alskdjf;

これはvim以下で機能し、@ ShaunBouckaertの「最後に使用した検索パターンをクリアする」ための論理的にクリーンなソリューションよりも覚えやすく、入力しやすいです。

:let @/ = ""

潜在的な欠点は、検索履歴に迷惑メールが追加されることです。


17
これは汚い解決策であるだけでなく(私自身もこれまで使用していましたが、問題はありません)、もう1つの欠点は、ウィンドウの下部に「パターンが見つかりません」という醜い赤いバナーが追加されることです。それ自体が破棄され、さらにアクションが必要になります(「検索+バックスペース」など)。
Skippy le Grand Gourou 2012

5
ファイルの残り全体を実際に検索するため、数秒かかることもあります。ファイルが大きい場合、それは本当に迷惑です。もちろん、現在の位置にマークを付け、最初にジャンプして、文字を逆方向に検索することもできますが、これも同様にあいまいです。
ブラックライトが2014

5
これは、コマンドについて学ぶ前にほとんどの場合に使用するソリューション:nohlです。後者について知ったら、すぐにその検索をやめました。
トビアス

7
これは答えではありません。OPが既に実行していることを実行することをお勧めします。「今では、意味不明な意味不明なものをもう一度検索します。」
モニカの復活-notmaynard 14

2
フールプルーフで短いパターンが必要な場合は、そのまま使用してください/$4。一致する可能性が低いだけでなく、実際には完全に不可能です。$常に改行が続くか、ファイルの終わりである必要があり、4は改行でもファイルの終わりでもありません。(特に4の理由は、同じキー上にあるため、すばやく入力するのが本当に簡単です)
セミコロン

32

私の.vimrc.localファイルに再マッピングしました、すばやくダーティですが非常に機能的です:

" Clear last search highlighting
map <Space> :noh<cr>

32
nnoremap <cr> :noh<CR><CR>:<backspace>

そうすれば、検索後:nohにヒットenterしたときに、コマンドラインに表示されたものを取り除くことができます。

:新しいコマンドの入力を開始し、Backspaceそれをクリアして、フォーカスをエディターウィンドウに戻します。


6
ありがとうございました。左下に表示される ":noh"は、私を夢中にさせて、いまいましいOCDでした。
andrewtweber 2014年

私はnnoremap <S-cr>:noh <CR> <CR>を実行してシフトされたcrにマッピングしようとしていましたが、機能しませんでした。なぜ機能しないのかご存知ですか?
チャーリーパーカー

シフトとリターンを組み合わせることはできないと思いますが、正直なところ、わかりません。
sjas 2014年

@CharlieParker IIRCでは、シフトオン[a-z]とそのような文字のみを使用できます。
sjas 2015

7
の代わりに:<Backspace>、の<silent>後に追加nnoremapして、コマンド領域に出力を表示しないようにVimに指示することができますnnoremap <silent> <cr> :noh<CR><CR>
Soren Bjornstad

31

元の質問で尋ねられたように、提案する回答(:nohまたは:nohlsearchマットマクミンのもの)は、検索の強調表示を一時的に無効にするのに適しています。

ノーマルモードで役立つマッピングを提供したいと思いました。

nnoremap <C-L> :nohlsearch<CR><C-L>

デフォルトでCtrlLは、Vimは画面をクリアして再描画します。多くのコマンドラインプログラム(主にBashなどのGNU Readlineライブラリを使用するプログラム)は、同じキーの組み合わせを使用して画面をクリアします。この機能は、バックグラウンドで実行されているプロセスがターミナルに出力され、フォアグラウンドプロセスの一部が上書きされる状況で役立ちます。

この通常モードのマッピングは、画面を再描画する前に、最新の検索語の強調表示をクリアします。2つの機能は互いに補完し合っているCtrlLため、検索の強調表示を無効にするための個別のマッピングを作成するよりも、両方のアクションで1つを使用すると便利です。

注意: 他の方法ではnoremapなく使用さmapれます。マッピングは再帰的です。

ヒント:このようなキーの組み合わせを簡単に入力できるように、通常はに再マップCaps LockCtrlます。これを行うための詳細は、OS /ウィンドウシステムの選択に依存します(そしてこの回答ではトピックから外れます)。次の両方のヒントには、へのマッピングCaps Lockとに関する情報が含ま CtrlれていEscます。


26

通常:noh、バックスラッシュキーにマップします。強調表示を再度有効にするには、を押すだけでn、再び強調表示されます。


24

検索の強調表示を完全に無効にする

を使用して検索を行うと、一致は強調表示されません /

:set nohlsearch

次の検索までハイライトをクリア

:noh

または:nohlsearchnまたはNが押されるまでクリア)


押すと明確なハイライト ESC

nnoremap <esc> :noh<return><esc>

別のキーまたはカスタムマップを押すとハイライトがクリアされる

  • 押すとハイライトをクリア\(バックスラッシュ)

    nnoremap \ :noh<return>
    
  • ESC2回打つ際のハイライトをクリア

    nnoremap <esc><esc> :noh<return>
    

2
nnoremap <silent> <esc> :noh<return><esc>ソリューションは、GUIのvimの中でうまく動作しますが、深刻な問題が発生し、矢印キーと他のESCでエンコードされた鍵の端末でVimを実行しているし。 あなたの中に入れないでください ~/.vimrcでそれをラップせずにif has('gui_running')... end。また、ステータスバーのコマンドが<silent>点滅しないようにするを追加することも検討してください:noh
jbyler 2017

17

これは私が使用するものです(さまざまな質問/回答から抽出されました):

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

「double」Escを使用すると、強調表示が削除されますが、再度検索するとすぐに強調表示が再表示されます。


別の選択肢:

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

vimのドキュメントによると:

clearmatches()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.

上位のソリューションでいくつかのバグに直面したので、すべての答えを試して時間を節約しました。このソリューションを使用してください!を編集して.vimrc、次のエントリをその中に入れますnnoremap <silent> <Esc><Esc> :let @/=""<CR>
。– ani627

しかし、それはそれがOo多分あなたが賛成票を投じることができると言っていることですか?
パブロオルモスデアギレラC.16年

私はあなたのソリューションをサポートしています... IMOは最高のIMOです...そして私もそれを支持しました.. :)
ani627

1
で検索レジスタをクリアすると、検索を元に戻せなくなるという@/=""副作用がありnます。私が好む:noh再利用するためのレジスタで、前の探索を続けています。
jbyler




7

これには2つの「必須」のプラグインがあります。

  1. 賢明 - Ctrl-lnohlsearchと再描画画面のため。
  2. unimpared - [oh]ohおよびcoh制御hlsearchへ。

健常は変更coyoそれはだ、V2にyoh。参照してくださいgithub.com/tpope/vim-unimpaired/blob/v2.0/doc/unimpaired.txtgithub.com/tpope/vim-unimpaired/issues/150
myrdd

cohまだ使用yohできますが、使用する場合は使用を勧めるメッセージがありますcoh
avinashkrsharma

7

カーソルを移動したらすぐに強調表示をオフにします。

vim-coolをインストールします。この特定の問題を修正するために作成されました。カーソルを移動するとすぐに強調表示がオフになります。ただし、最新のvimバージョンが必要です。


6

これupdatetimeにより、非アクティブ状態が数ミリ秒続くと、検索ハイライトがクリアされます。

updatetimeデフォルトは4000ミリ秒または4秒ですが、私は10秒に設定しています。はこれupdatetimeだけではないので、変更する前にドキュメントを読んでください。

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END

6

ハイライトをすばやく有効/無効にしたい場合は、キーを

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>

上記のスニペットを.vimrcファイルに挿入するだけです。

これは、歌うキーストロークで検索ハイライトを表示および非表示にするための最も便利な方法です

詳細については、ドキュメントhttp://vim.wikia.com/wiki/Highlight_all_search_pattern_matchesを確認してください


5

上位2つの回答を組み合わせることによるもう1つの解決策:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>

で検索レジスタをクリアすると、検索を元に戻せなくなるという@/=""副作用がありnます。私が好む:noh再利用するためのレジスタで、前の探索を続けています。あなたはそれにバインド<F3>することができますnnoremap <F3> :noh<CR>
jbyler



4

私の推測では、元の質問は無効にしないことでした検索の強調表示をするのではなく、前回の検索から強調表示をクリアするだけでした。元のポスターで言及されている、意味不明な文字列を検索するソリューションは、以前の検索で強調表示をクリアするためにしばらく使用してきたものですが、醜く扱いにくいものです。

nnoremap ...〜/ .vimrc に追加するとわかったいくつかの提案は、起動時にvimを置換モードにするという効果がありますが、これは私が望んでいることではありません。私が見つけた最も簡単な解決策は、行を追加することです

nmap <esc><esc> :noh<return>

〜/ .vimrcに。これは、KISSの原則に忠実であり、単一の<esc>を使用して行う矢印キーを妨害しません。以前の検索から強調表示をクリアするには、コマンドモード(または挿入モードまたは置換モードのトリプル<esc>)でdouble- <esc>が必要ですが、UIの観点からは、これにより操作が可能な限り簡単になります。


単一の<esc>が矢印キーと干渉するとはどういう意味ですか?
hansmosh 2017

1
@hansmosh unix.stackexchange.com/questions/28713/を参照してください。.vimrcで 次のように2行使用します nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
Lindsay Haisley

4

私は次のものを使っています ~/.vimrc

nnoremap <Leader><space> :noh<Enter>

これにより、現在ハイライトされている検索を非常に簡単かつ迅速にクリアできます。私のリーダーキーがマッピングされている\ので、これにより、右の小指と親指で操作を非常に簡単に実行できます。


3

@ShaunBouckaertと2009年3月19日の16:22の回答を組み合わせることは、良い妥協案だと思います。

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

を押すEnterと、強調表示されたテキストは強調表示されなくなりますが、検索の強調表示はまだ有効です。


3

:noremapを使用して、このように検索結果のオン/オフを切り替えることができます

:noremap <F3> :set hls! hls?<CR>


3

@ baruch-evenの回答に基づいてESC通常モードでダブルプレスすると次のように検索語を削除できます。

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[

2番目のバインディングは問題ないと思いますが、最初のバインディングは危険です。再マッピング<esc>はGUI vimでうまく機能しますが、vimを端末で実行すると、矢印キーやその他のESCでエンコードされたキーで深刻な問題発生します。 あなたの中に入れないでください ~/.vimrcでそれをラップせずにif has('gui_running')... end。また、ステータスバーのコマンドが<silent>点滅しないようにするを追加することも検討してください:noh
jbyler 2017

1

私も好きではありません。私は:nohlいつも入るのが面倒だと思ったので...私は私の中に次のマッピングを入れました.vimrc

noremap <C-_> :nohl<cr>:<backspace>

最初のビット(:nohl<cr>)は強調表示をクリアします。2番目のビット(:<backspace>)は、コマンドラインをクリーンアップするためのトリックです。検索はまだバックグラウンドで行われているので、単にヒットnすると、再度ハイライト表示され、次の検索に移動します。


1

これをvimrcファイルに追加しました。

command! H let @/=""

検索を行った後、検索結果のハイライトを消去したい場合は、 :H


1

別の方法として、.vimrcファイルにマッピングを追加することもできます。

nmap <C-N>:nohlsearch

そして、あなたは押すことができます

Ctrl + N

いつでもハイライトされたテキストをクリアする


回答を編集して、この質問にすでに存在する他の回答よりも改善されるようにしてください。
hongsy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.