検索が完了したら、「hlsearch」を自動的にオフにする方法は?


19

「hlsearch」の設定は気に入っていますが、検索が終わった後は不快です。特に、多くの一致があるものを検索する場合。私はこれをオフにすることができることを知っています

:set nohlsearch

しかし、これには全部で16回のキーストロークがかかり、さらに面倒なことに、次の検索のために再びオンにする必要があります

:set hlsearch    

検索を開始するとhlsearchが自動的にオンになり、検索が終了すると自動的にオフになる方法はありますか?たとえば、挿入モードに入るか、テキストを変更する場合、追加のキーストロークなしでhlsearchをオフにしますか?


3
自動的に定義します。
アントニー

@Antony同様に、編集を行っている場合、または挿入モードの場合、ボタンを押す必要なくオフになります。/または?で検索を開始するか、またはを押すnN、それ以上ボタンを押す必要なくオンになります。
DJMcMayhem

1
ああ、「完了」検索を定義する
クリスチャンブラバンド

1
:nno <BS> :set hls!\|set hls?<CR>-1行、1回のキー押下、状態フィードバック、および強調表示する場合としない場合の二次推測を試みません。編集時に画面の左に強調表示したい場合があります。時々、私はしません。例えば/、オペレーターと一緒にモーションとして使用します。
アントニー

nnoremap <M-\> :set hlsearch!<CR><Bar>:echo 'hlsearch: ' . ['Off', 'On'][&hlsearch]<CR>
佐藤桂

回答:


25

もっと便利な方法があります。使用するのではなく

:set nohlsearch

これにより、実際にhlsearch設定がオフになります。

:nohls

これは、再度検索するまでhlsearchのみをオフにします。から:help nohls

                 *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
'hlsearch' 'hls'    boolean (default off)
            global
            {not in Vi}
            {not available when compiled without the
            |+extra_search| feature}

    ...

    When you get bored looking at the highlighted matches, you can turn it
    off with |:nohlsearch|.  This does **not change the option value**, as
    soon as you use a search command, the highlighting comes back.

ただし、このソリューションは完全ではありません:nohls。検索するたびに入力する必要があるため、入力する必要があります。あなたはマッピングでこれを回避することができます、例えば

nnoremap <esc><esc> :silent! nohls<cr>

しかし、さらに良い解決策があります!haya14busa / incsearch.vim。これは、少なくとも私の意見では、不可欠な vimプラグインです。主な機能は、正規表現を入力しているときに、すべての検索一致がリアルタイムで強調表示されることです。例えば:

ここに画像の説明を入力してください

ただし、提供される2番目の機能は、検索の開始/停止時にhlsearchのオンとオフをすぐに切り替えるオプションです。この機能を有効にするには、追加する必要があります

set hlsearch
let g:incsearch#auto_nohlsearch = 1
map n  <Plug>(incsearch-nohl-n)
map N  <Plug>(incsearch-nohl-N)
map *  <Plug>(incsearch-nohl-*)
map #  <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)

.vimrc

他のnマッピングがある場合は、これらをオフにする必要があります。たとえば、以前は

nnoremap n nzz
nnoremap N Nzz

これら2つのマッピングは相互に互換性がありません!


あなたは自己回答をしているので、私もあなたに別の問題を追加することを提案したいと思いますset hlsearch。定義されている場合は、ソースvimrcを作成する:nohたびに上書きされますvimrc。これを整理するために私は私の犬を持っif !&hlsearch | set hlsearch | endifていvimrcます。(そして、これはプラグインが解決する別の問題です。)
grochmal

Dunno、私にとってはそれほど多くの利益のためのコードと設定の全体のヒープのようです。実際、インクリメンタル検索のターゲットを見つけるのが難しくなり、迅速なナビゲーションにはあまり役立ちません。
アントニー

+1質問に答えて、もっと多くのことをする素晴らしいプラグイン!
リッチベル

7

vim-coolはこれを行うシンプルなプラグインです。

Vim-coolは、検索が終了すると検索の強調表示を無効にし、再度検索すると再び有効にします。

それは作品の再マッピングなし使用CursorMovedしてInsertEnter自動コマンドを。


この方法(オートコマンドを使用)は、私の答えよりもはるかに優れており、私が書いたときには考えもしなかったとは信じられません。賛成票。
リッチ

5

<Leader><Enter>ショートカットとして使用し:nohます。(私のリーダーは,ですので、かなり近いです)

これにより、次の検索までハイライトがオフになります。


3

あなたがきたように、すでにあなた自身の答えで指摘し、それがハイライト表示してオフにはるかに効率的だ:nohlsearch(に短縮できコマンド:noh)全体ではなく、機能をオフにして、あなたが検索し、次の時間に戻ってそれを回します。

i挿入モードを使用するたびに強調表示をオフにしたい場合は、簡単なマッピングを作成してそうすることができます。

:nnoremap i :noh<cr>i

強調表示をオフにしたい他のコマンドに対して同様のマッピングを作成することは、読者の課題として残されています。


1

ばかげているように聞こえるかもしれませんが、強調表示を停止したいときは、ドキュメントに存在しない(事実上)ランダムな文字列を検索します。このようなもの:

/skljdfhadhfs

確かに、それはいくつかのキーストロークを取りますが、それらは本当にランダムなので、すぐに入力することができます。


1
しかし、これますnN、もはや仕事、そしてまた、のようなもの:%s//something:g//something。また、検索履歴が
乱雑になり

はい、しかし、私の(おそらく正しくない)仮定は、あなたがこれ以上強調表示する必要がないので、あなたはその特定の検索についても気にしないということです。検索履歴に依存している場合、検索履歴の乱雑さは本当の問題です。
コスタス

1

私はそれがより直感的に再マップすることが分かってきたCtrl- L含まれるように再描画を:nohls

nnoremap <C-L> :nohls<cr><C-L>

ViとVimへようこそ!確かに古い質問についての知識を共有していただきありがとうございます。お気づきかもしれませんが、高品質の回答には、通常、コードが何をしているのかについての説明が付いています(これは、あまり知識がなくてもここに着くかもしれない新しい初心者にとって特に役立ちます)。関連する:helpセクションにもお勧めです!
D.ベンノーブル

0

<Leader><Enter>ショートカットとして使用し:hls、リーダーをスペースとして設定します。

let mapleader = "\<Space>"
nmap <silent> <leader><Esc> :set hls!<cr>

検索した後、アイテムをハイライトし<Space><Esc>ます。それをオフにするには、を押します。検索結果を再表示する場合は、を押します<Space><Esc>hls!手段がための設定を切り替えるために結合、このキーをマップするhls(ための速記hlsearch(よう強調した結果を検索する、すなわち)を!右のそれの前に設定を切り替えます)。


-1

このマクロを.vimrcに追加します

map #h :set hls!<CR>

これにより、#hでハイライトを切り替えることができます


これはジェームズ・アフレックの答えと変わりません。
ジェームスサン

私はもっ​​と簡潔に思えます。
ダレルリー

簡潔さが重要なのはなぜですか?もう1つの投稿では、コマンドの各部分の意味に関する詳細情報を提供し、この投稿では追加のコンテンツは提供しません。
ジェームスン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.