:nohlsearchと:set nohlsearchの機能的な違いは何ですか?


13

私はそれを:nohlsearch実際に使用すると、実際には同じことをしないことに気付きました:set nohlsearch

特に、hlsearch設定は実際にはオフになりません(これが何を行うか:set hlsearch)。

私が意味することを実証するには:

:set hlsearch
:nohlsearch
:echo &hlsearch

これは印刷します1hlsearchはまだ設定されています!

:set hlsearch
:set nohlsearch
:echo &hlsearch

これ0は、vimで設定をオフにする標準的な方法を使用してhlsearchをオフに切り替えたために出力されます。

:nohlsearchexコマンドが存在するための実際の理由が必要なので、私はちょっと不思議に思っています。

私が気にする理由は、vimスクリプトで検索ハイライトがアクティブかどうかをテストする必要があり:nohlsearch、他のスクリプトで ":set nohlsearch"の代わりに使用していたため、&hlsearchテストが常に戻るため1です。だから、nohlsearchexコマンドを使用しなくなったことで何が変わっているのだろうかと思っています。

回答:


15

から :h :nohlsearch

                                                        :noh:nohlsearch
:noh [lsearch] 'hlsearch'オプションの強調表示を停止します。それ
                        検索を使用すると自動的にオンに戻ります
                        コマンド、または「hlsearch」オプションの設定。
                        このコマンドはオートコマンドでは機能しません。
                        強調表示状態は次の場合に保存および復元されます
                        autocmds autocmd-searchpatを実行します。
                        ユーザー関数を呼び出すときも同じです。

重要な点は、新しい検索を開始すると、強調表示が自動的に元に戻ることです。:set nohlsearch実際にhlsearchオフになります。つまり、次に何かを検索すると、強調表示は行われません。

例:hlsearchオンであると仮定します。現在バッファで「hello」を検索している場合、すべての「hello」が強調表示されます。:nohlsearch何も使用しない場合は強調表示されます。ただし、「world」を検索すると、すべての「world」が強調表示されます。set nohlsearch代わりに「world」を使用した場合、強調表示されません。


また、このコマンドはユーザー関数内では基本的に何もしないことに注意してください。例えば、

function! NoHlsearch()
    nohlsearch
endfunction

実行時に目に見える効果はありません。


hlsearchが実際にアクティブかどうかを確認するには、変数を確認しますv:hlsearchv:hlsearch = 0ハイライトがオフのとき、およびv:hlsearch = 1ハイライトがオンのとき。確認する&hlsearch = 1前におそらく確認する必要がありv:hlsearchます。

から :h v:hlsearch

                                        v:hlsearch hlsearch-variable
v:hlsearch検索の強調表示がオンかどうかを決定する変数。
                'hlsearch'が有効になっている場合にのみ意味があります。
                + extra_search。この変数をゼロに設定すると同様に機能します
                :nohlsearchコマンド、1に設定すると次のように動作します
                        let&hlsearch =&hlsearch

関数の内部から「基本的には何もない」という意味を明確にできますか?標準的なことを行います(次回検索が呼び出されるまで一時的に検索の強調表示を停止します)。
スティーブンルー

また、トランジェント:nohlsearchが有効であるかどうかを制御するフラグにアクセスする方法を見つけることを望ん:nohlsearchでいます。
スティーブンルー

@StevenLu編集を参照してください。
FDinoff

ありがとう。コードのように見えますが、私はこれを行うことによってそれを「基本的に何もしない」側面の周りにハックを使用している:nnoremap <silent> <expr> <boundkey> SearchHighlight()どこSearchHighlight()の文字列を返すことがあり":silent nohlsearch\<CR>"。また、v:hlsearchヒント、私が必要なものに感謝します。
スティーブンルー

1

スクリプトでは、強調表示の現在の状態を知る必要がありますか?

hlsearch現在の検索のみを無効にするにCtrl-lは、.vimrcでこれを使用します。

nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>

上記のコマンドを使用すると、検索の強調表示は次の検索で戻ります。Ctrl-l通常の使用法は画面をクリアして再描画するためです。

検索の強調表示状態を永続的にオンまたはオフに変更するには、F3をトグルとして使用します。

nnoremap <F3> :set hlsearch! hlsearch?<CR>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.