置換後にvimが一致を強調表示しないようにするにはどうすればよいですか?


13

私は私のを持っset hlsearchてい~/.vimrcます。通常、これは非常に便利ですが、次の:nohような置換を実行した後に実行する必要があるのは面倒です'<,'>s/$/',/(実行後にすべての行の終わりが強調表示されます)。vimこのように交換した後、ハイライト表示しないようにするにはどうすればよいですか?

Ubuntu 9.04 vim7.2を使用しています。OS X 10.6(vim7.2)でも同じ問題があります。両方で機能するものが望ましいでしょう。

更新:受け取った回答はすべて、実行するキーマッピング:noh(または同等のもの)を追加するだけです。私は本当に慣れるであろうカスタムキーの振る舞いを避けようとしますが、それなしでは(例えば友人のコンピューターなどで)惨めに失敗させます。交換後vim、自動的にやりたいと思います:noh。つまり、or (または他のいくつかのケース)hlsearchを使用する場合にのみ必要ですが、他の時間には使用しません。/*

回答:


7

永続的に無効にしたくない場合は、この回答で提案されているように、キーをバインドしてハイライトを切り替えて、stackoverflowの同様の質問答えることができます。

map  <F12> :set hls!<CR>
imap <F12> <ESC>:set hls!<CR>a
vmap <F12> <ESC>:set hls!<CR>gv

ハイライトを永久に無効にする場合:

11.1. After I searched for a text with a pattern, all the matched text
      stays highlighted. How do I turn off the highlighting
      temporarily/permanently?

The 'hlsearch' option controls whether all the matches for the last
searched pattern are highlighted or not. By default, this option is not
enabled. If this option is set in a system-wide vimrc file, then you can
turn off the search highlighting by using the following command:

    :set nohlsearch

VIM FAQから)


2
私はこのオプションを知っていました。問題は、私が交換したいものを通常検索していないということです。そのため、私が交換したほとんどの場合に強調するのは無意味です。しかし、それは私がするときに非常に便利ですしています、私はそれが行きたくないので、何かを探して完全に離れました。
ベンジャミンオークス

@ベンジャミン:あなたは暗黙のうちにそれを検索しました。それが:sがすることです。パターンを検索してから、一致に対して変換を実行します。:nohlを使用すると、次の検索が実行されるまで現在の検索パターンのハイライトがオフになるため、適切なソリューションです。これは、「hlsearch」オプションの状態を変更したり、以前の検索用語の保存値に影響を与えたりすることなくこれを行います。
ジェームスサン2009

2
@jamessan:私はそれが検索と置換であることを理解しています。強調表示する必要はありません。ほとんど何よりも迷惑。
ベンジャミンオークス

少し前に、デフォルトで強調表示をオフにし、あなたが提案したように、必要なときにオンにしました。まだ完璧ではありませんが、より良いです。
ベンジャミンオークス

9

私は2つの異なるソリューションを持っていますが、どちらも非常に優れており、それぞれ微妙な動作が異なります。私のお気に入りはオプション2です。

  1. .vimrcに次の2行があります。

    autocmd cursorhold * set nohlsearch
    autocmd cursormoved * set hlsearch
    

    最初のものは、カーソルが移動せずにhlsearchをオフにする場合、タイムアウト(構成不可)を待機します。2番目のカーソルは、カーソルが再び移動した場合にオンに戻ります。

    それは完璧な解決策ではありませんが、私にとってはうまくいきます(そして、タイムアウトが設定可能であれば完璧に近くなります-今のところ、タイムアウトはvimの組み込みタイマーに関連付けられています)。

  2. または、次の行を試すことができます。

    autocmd cursorhold * set nohlsearch
    noremap n :set hlsearch<cr>n
    noremap N :set hlsearch<cr>N
    noremap / :set hlsearch<cr>/
    noremap ? :set hlsearch<cr>?
    

これにより、カーソルの移動がないという短いタイムアウトの後にhlsearchがオフになり、標準の検索コマンドで再びオンになります。hlsearchをオンに戻す可能性のすべてを網羅しているわけではありませんが、概念実証の出発点としては十分です。


更新をありがとう-今まで見ませんでした。(あなたもそれを追加したように見えますか?おかしいです。)これはクールなコンセプトです。私はそれをいじる必要があります。
ベンジャミンオークス

2.それはビジュアルモードで検索を作ることにあるの警告Vではない仕事
ブライスGuinta

オプション1の最初の行を次のように変更しました。 autocmd cursorhold * set nohlsearch | let @/ = "" これにより、検索レジスタがクリアされ、ハイライトが削除されます。このセットアップに多くの時間を費やしていませんが、私はここで終わる人々のためにそこにそれを出したかったです。
バークレーマルチネス

2

ハイライト表示を取り除くために、「/ asdf」と入力するだけです(「asdf」がファイル内にないことを前提としています)。私はそれがかなり単純化されていることを知っていますが、私にとってはうまくいきます。


2
これはと同じ考え方ですが:noh、常に機能するとは限りません。:)おもしろいことですが、私はいつも彼の名前をタイプする友人がいました。なぜなら、彼が書いたものでは「asdf」のようなものよりも頻繁に出ないからです。(金田面白い、私は思う。)
ベンジャミンオークス

本当です。たぶん私は覚えているだろう:次回は。
グレッググラハム

1

.vimrcファイルに次を追加します。

nnoremap <silent> <F11> :exe ":silent! normal /$^\r"<CR>

これにより、強調表示された検索語が静かに非表示になりますが、:set hlsearch機能は無効になりません。次の検索で再びアクティブになります。


この目的のために設計された組み込みコマンド--nohlを使用することをお勧めします。その後、あなたは次の試合にジャンプのようなもののために使用されている検索レジスタの内容を吹き飛ばしていない、など何も指定されていないパターンのデフォルト値
jamessan

ええ、しかし、次の検索が想定どおりにハイライトされなかったことに悩まされました。そこで、私はこの簡単な解決策を考え出しました。汚れているかもしれませんが、動作します。私はこれがvimに受け入れられると思います-私が実際の大きなプロジェクトのソースコードで「汚い」ものを使用しなくても。
グレゴールミュレッガー

1

別の可能性は@/、置換を行った後にレジスタ(実際には読み取り/書き込みレジスタ)をリセットすることです。これにより、以前のハイライトが復元されます。

command! -nargs=* -range S
\ let atslash=@/|exe ':'.<line1>.','.<line2>.'s'.<q-args>|let @/=atslash

ただし、これにはまだいくつかの問題が
あります。-変更する代わりに:s、新しいコマンドを定義します。使用することが可能である一方でcabbrevマッピングするため:s:S、私のようなすべての構造をキャッチする方法を知っていません:<range>s
- :nohl以前に1つの検索のみを非表示にするために使用した場合、これは以前の検索を再度強調表示します。:nohl以前に呼び出されたかどうかを確認する方法がわかりません。(これを回避して:nohlコマンドをオーバーライドすることも可能ですが、これにはすべての検索コマンドをオーバーライドする必要がありますが、これは多すぎるかもしれません...)。

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