Son arama vurgulamasını temizle


1904

Vim'de bir arama yaptıktan sonra, tüm olayları vurgularım. Bunu nasıl devre dışı bırakabilirim? Şimdi, bulunamayan anlamsız bir şey için başka bir arama yapıyorum.

Vurgulamayı geçici olarak devre dışı bırakmanın ve gerektiğinde yeniden etkinleştirmenin bir yolu var mı?


197
Bence "nnoremap <esc>: noh <return> <esc>" çözümü soruya daha eksiksiz bir cevaptır. önceki aramadan (ancak iyi vurgulamayı devre dışı bırakmayın).
Stewart Johnson

5
: set invhlsearch, önceden vurgulanmışsa vurgulamayı devre dışı bırakır ve değilse etkinleştirir. Shift-H demek için haritalandırabilirsiniz.
puffadder

1
@StewartJohnson bunu .vimrc dosyalarımda aşağıdakilere müdahale ediyor / bozuyor gibi görünüyor: set mouse = a. Neden herhangi bir fikir? Bu hata sadece iTerm2'de
Charlie Parker

20
@StewartJohnson Dikkatli ol! Eşleme ile en yüksek yorumunuz aşağıdaki açıklamalarda açıklandığı gibi hatalara ve beklenmedik davranışlara neden olur stackoverflow.com/a/1037182/1698467
skywinder

3
nnoremap <esc> :noh<return><esc>@StewartJohnson önerdiği çözüm GUI vim içinde güzel çalışır, ancak ok tuşları ve diğer ESC kodlanmış tuşları terminalde vim çalışan sorunlara neden olmaktadır. Gözlerinde farklı koydu etmeyin ~/.vimrc sararak olmadan if has('gui_running')... end.
jbyler

Yanıtlar:


1587

Bir sonraki aramaya kadar vurgulamayı kapatmak için:

:noh

Veya vurgulamayı tamamen kapatın:

set nohlsearch

Veya, geçiş yapmak için:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

14
Set nohlsearch yaparak vim yeniden başlatıldığında vurgulama geri döner. :nohdaha iyi çalışır.
Dharmit

21
anlamsız bir dize aramak kadar hızlı olabilir: / oajf3w9: noh. @ Avocade'nin boşluk anahtarını eşleme çözümünü beğendim: noh
nnyby

160
Bu, bu yanıt ve yorumlardan net değildir: set nohlsearchsonraki aramalar için vurgulamayı da devre dışı bırakacağını unutmayın . Davranışı :nohçok farklıdır: yeni bir arama yaptığınızda veya geçerli arama ile ilgili bir şey yaptığınızda (örneğin bir nsonraki öğeye gitmek için yazdığınızda) vurgulama otomatik olarak yeniden etkinleştirilir .
Skippy le Grand Gourou

10
Bunların gerçekte ne yaptığı ve sonuçları hakkında bir açıklama yok. Bazılarını açıkladığı için @SkippyleGrandGourou'ya teşekkürler.
Jason S

3
Onun değeri için, ben bunu '\/'(ya da Lideriniz ne olursa olsun):map <Leader>/ :nohlsearch<CR>
brianmearns

689

Gönderen VIM Belgeler

Son kullanılan arama desenini temizlemek için:

:let @/ = ""

Bu, kalıbı boş bir dizeye ayarlamaz, çünkü bu her yerde eşleşir. Desen Vim'e başlarken olduğu gibi gerçekten temizlenir.


129
... anladığım kadarıyla sorununa daha iyi bir çözüm olurdu.
Shaun Bouckaert

8
Aradığım şey buydu! Oy verdim, soru biraz belirsiz. Bu beni istediğini düşünmeye itti: "Şimdi bulunamayan anlamsız bir şey için başka bir arama yapıyorum". Çünkü aramayı temizlemek için yapıyordum, ancak bir sonraki arama tekrar vurgulanacak şekilde devre dışı bırakmıyordum.
claytron

50
Sorunun bununla ilgili olduğunu düşündüğüm şey ... işte arama dizesinin temizlenmesini hızlandırmak için yaptığım bir komut (ve bu nedenle tüm vurguları kaldırmak): :command C let @/=""Bunu kullanarak :Carama dizesini temizlemek için yazmanıza izin verir ... çok hızlı ve gelecekteki aramayı veya vurgulamayı etkilemez.
Jason

12
@ jcreamer898, "kayıtlar" ( :he registers) konusunda vim yardımına bakın . Vim, bazen yanık veriler, bazen son arama vb. İçin metin tutan birkaç farklı yerleşik kayıt defterine sahiptir. Bir arama yaptığınızda vim, deseni referans olarak kullandığınız "/" kaydına koyar @/. Ayrıca , kaydın adının @regname=valuenerede regnameolduğunu kullanarak kayıtlara değerler atayabilirsiniz . Yani, @/="""/" kaydını boş bir dizeye ayarlamak ("/" register vim için boş bir dize içeriyorsa son aramayı temizlemesi dışında).
Ben Davis

3
Son aramayı silmek için Ctrl + / almak için bunu noremap <silent> <c-_> :let @/ = ""<CR>
.vimrc'nize ekleyin

583

Yapabilirsin

:noh

veya bir :nohlsearchsonraki aramaya kadar arama vurgulamayı geçici olarak devre dışı bırakmak için.


3
teşekkürler, bu yardımcı oldu ... vurgulamak için herhangi bir komut?
Gabriel Solomon

17
: nohs sadece mevcut vurgulamayı kapatır. Varsa: hlsearch ayarlandığında aramalarınızı vurgulamaya devam eder.
greyfade

6
Bence OP'nin aradığı şey budur (Shaun'un yanıtı da işe yarıyor). Daha kısa olduğu için bunu dile getiriyorum. Nohls cevabını kabul ettiğini biliyorum, ancak daha sonra başka bir arama denenmiş olsa bile, tüm arama vurgulamayı devre dışı bırakacaktır.
Thiago Arrais

5
Muhtemelen bu OP'nin en başta istediği şey ve IMHO'nun en kısa, en iyi cevabı.

Bu ölümlü alemde bile mükemmellik elde edilebilir! Bunu daha fazla kullanacağım: yardım ve <esc>: nnoremap <F1>: noh <CR>
Sam Watkins

305

Bu cevabı yıllar önce vim.org'da buldum:

Aşağıdakileri .vimrc'nize ekleyin:

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

Böylece, aramanızdan sonra, komut modunda tekrar geri dönün ve vurgulama kaybolur.


36
Bunun aslında kabul edilenlerden çok daha iyi bir çözüm olduğunu düşünüyorum - ya bu ya da bunun yerine <ESC> ile eşleştirildiği çözüm.
Stewart Johnson

20
Bu "nnoremap <esc>: noh <return> <esc>" için çok daha iyi bir cevaptır çünkü garip davranışlara neden olmaz.
Dennis

19
Dikkat edilmesi gereken önemli bir nokta, yeniden eşlemenin sağ tarafına herhangi bir yorum eklemediğinizden emin olun. Bunlar, yorumların aksine yeniden eşleme komutları olarak yorumlanacaktır.
codybuell

13
Yorum yanlış; Komut yok değil son arama deseni unset ama sadece şimdiki sonuçların vurgulama kapanır; bir nsonraki tekrarlamayı bulmak için vurabilirsiniz (bu tekrar vurgulanır). BTW, komut dosyası yazarken, kısaltılmış formdan kaçınır ve yazarım :nohlsearch.
Tobias

28
Ekranın yanıp sönmesini ve komut satırında noh bırakmasını önlemek için <silent> ekleyin -: nnoremap <silent> <CR>: nohlsearch <CR> <CR>
Peter N Lewis

137

Http://twitter.com/jonbho/status/2194406821 adresinden

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

İkinci satır kaçış anahtarıyla eşleştirmek için gereklidir, çünkü Vim dahili olarak özel anahtarları temsil etmek için kaçış kullanır.


12
Açık olmak gerekirse, bu Escape tuşuna basarak arama vurgulamasını temizlemenizi sağlar
Gavin Miller

7
Nedense, bu benim terminal vim "c" basılı gibi başlatmak yapar. Herhangi bir fikir?
Jacob

31
Denediğimde bu çok garip bir davranışa neden oldu: başlangıçta düzenli vim hareketleri (örn. J, k) satırların kaldırılmasına neden olur. nnoremap <CR>: noh <CR> <CR> bu sorunlara neden olmadı. Temel nedeni bulamadım.
oasisbob

9
hmm, yukarıdaki problemlerle aynı problemi yaşadım. Metninizi rastgele silmek istemediğiniz sürece bunu olduğu gibi kullanmayın ...
Derek Litz

8
"nnoremap <esc>: noh <return> <esc>" kullanarak vim her zaman "REPLACEMENT" modunda başlar.
user1850133

38

Orijinal çözümüm (aşağıda) kirli ve israflıydı. Şimdi kullanıyorum:noh

Vim'deki birçok özellik gibi, doğru yol genellikle kolayca keşfedilemez.

-

(BUNU YAPMA)

Olası bir karakter dizisi arayın (giriş satırındaki tuşları birleştirin):

/;alskdjf;

Bu vim ve daha az çalışır ve @ ShaunBouckaert'in "son kullanılan arama modelini temizlemek için" mantıksal olarak daha temiz çözümünden daha kolay hatırlanır / yazılır:

:let @/ = ""

Olası bir dezavantaj, arama geçmişinize önemsiz öğe eklemesidir.


17
Bu sadece (şimdiye kadar kendim kullandığım kirli bir çözüm değil), başka bir dezavantajı, pencerenin alt kısmında "vurgu bulunamadı" diyen çirkin bir kırmızı bayrak eklemesidir. ve atılmak için daha fazla işlem gerektirir (örn. "arama + geri al").
Skippy le Grand Gourou

5
Dosyanın geri kalanının tamamını aradığı için de birkaç saniye sürebilir . Dosya büyükse bu gerçekten can sıkıcı. Tabii ki, mevcut konumunuzu işaretleyebilir, başlangıca atlayabilir ve bir karakter için geriye doğru arama yapabilirsiniz, ancak benzer şekilde kirli.
Blacklight

5
Komutu öğrenmeden önce en çok kullanacağı çözüm budur :nohl. İkincisini öğrendikten sonra, hemen bu aramaları yapmak için durdum.
Tobias

7
Bu bir cevap değil; sadece OP'nin zaten ne yaptığını öneriyor: "Şimdi bulunamayan anlamsız bir şey için başka bir arama yapıyorum."
Monica'yı eski durumuna getirme - notmaynard

2
Kusursuz ve kısa bir desen istiyorsanız sadece kullanın /$4. Sadece bir şeyle eşleşmesi mümkün değil, aslında tamamen imkansız. $her zaman bir satırsonu veya dosyanın sonu olmalı ve 4 dosya yeni satır veya dosyanın sonu olmamalıdır. (4'ün nedeni özellikle aynı tuşta olmasıdır, bu yüzden hızlı bir şekilde yazmak gerçekten kolaydır)
noktalı virgül

32

Hızlı ve kirli ama çok işlevsel .vimrc.local dosyama yeniden eşleştirildi:

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

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

Bu şekilde , aramadan sonra :nohvururken, komut satırında gösterilmekten kurtulurum enter.

:yeni bir komut girmeye başlamak gibidir, Backspacetemizler ve odağı editör penceresine geri koyar.


6
Teşekkür ederim. Sol altta görünen ": noh" beni deli ediyordu, lanet olası OKB.
andrewtweber

Nnoremap <S-cr>: noh <CR> <CR> yaparak kaydırılmış cr ile eşlemeye çalışıyordum ama işe yaramadı, neden işe yaramayabileceğini biliyor musunuz?
Charlie Parker

Vardiyayı geri dönüşle birleştiremeyeceğinizden şüpheleniyorum, ama dürüstçe hiçbir fikrim yok.
sjas

@CharlieParker IIRC sadece shift on [a-z]ve benzeri karakterleri kullanabilirsiniz.
sjas

7
Yerine yapmanın :<Backspace>, sadece ekleyebilir <silent>sonra nnoremapkomut alanında herhangi bir görüntü çıkışı için Vim anlatmak için: nnoremap <silent> <cr> :noh<CR><CR>.
Soren Bjornstad

31

Öneriler :nohveya :nohlsearch(ör. Matt McMinn'in) yanıtları , orijinal soruda sorulduğu gibi, arama vurgulamasını geçici olarak devre dışı bırakmak için doğrudur .

Normal modda faydalı bulduğum bir haritalamaya katkıda bulunacağımı düşündüm:

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

Varsayılan olarak, CtrlLVim'de ekranı temizler ve yeniden çizer. Birkaç komut satırı programı (çoğunlukla Bash gibi GNU Readline kitaplığını kullanan program ) ekranı temizlemek için aynı tuş kombinasyonunu kullanır. Bu özellik, arka planda çalışan bir işlemin, ön plan işleminin parçalarının üzerine yazarak terminale yazdırılması durumunda faydalıdır.

Bu Normal mod eşlemesi, ekranı yeniden çizmeden önce en son arama teriminin vurgulanmasını da temizler. İki özelliğin birbirini tamamladığını görüyorum ve birini kullanmak uygunCtrlL arama vurgulamasını devre dışı bırakmak için ayrı bir eşleme oluşturmak yerine her iki eylem için .

Not: noremap yerine kullanılan mapaksi takdirde, haritalama özyinelemeli olacaktır.

İpucu: Genellikle remap Ben Caps Locketmek Ctrldaha kolay böyle tuş kombinasyonları yazmak için yapmak; bunu yapmanın ayrıntıları işletim sistemi / pencere sistemi seçiminize bağlıdır (ve bu cevap için konu dışıdır). Hem aşağıdaki ipuçları haritalama hakkında bilgi içermektedir Caps Locketmek Ctrlyanı sıra Esc:


26

Genellikle :nohters eğik çizgi anahtarıyla eşleşirim. Vurgulamayı yeniden etkinleştirmek için vurmanız yeterlidir ve ntekrar vurgulanır.


24

Arama vurgulamayı kalıcı olarak devre dışı bırak

Düğmesini kullanarak her arama yaptığınızda eşleşmeler vurgulanmaz /

:set nohlsearch

Sonraki aramaya kadar vurgulamayı temizle

:noh

veya :nohlsearch( nveya Ndüğmesine basılana kadar temizler )


Basarken net vurgu ESC

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

Başka bir tuşa veya özel haritaya basıldığında net vurgu

  • Basarken net vurgular \(ters eğik çizgi)

    nnoremap \ :noh<return>
    
  • ESCİki kez vurmanın net vurguları

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

2
nnoremap <silent> <esc> :noh<return><esc>Çözelti GUI vim güzel çalışır, ancak ciddi sorunlara neden ok tuşları ve diğer ESC kodlanmış anahtarlar bir terminal içinde vim çalışan. Gözlerinde farklı koydu etmeyin ~/.vimrc sararak olmadan if has('gui_running')... end. Ayrıca durum çubuğundaki komutun <silent>yanıp sönmesini önleyenleri eklemeyi düşünün :noh.
jbyler

17

Kullandığım şey bu (birçok farklı soru / cevaptan çıkarılmış):

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

"Çift" Escile vurgulamayı kaldırırsınız, ancak tekrar aradığınızda vurgulama tekrar görünür.


Başka bir alternatif:

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

Vim belgelerine göre:

clearmatches ()

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

    |:match| commands.

En iyi çözümlerde bazı hatalarla karşılaştım, böylece tüm cevapları denemek için zaman kazanın. Bu çözümü kullanın! Düzenleyin .vimrcve içine aşağıdaki girişi koyun:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
user1336087

Ama Oo diyor ki Belki oylayabilirsin?
Pablo Olmos de Aguilera

Çözümünüzü destekliyorum ... En iyi IMO'dur ... Ve ben de bunu iptal ettim .. :)
user1336087

1
İle arama kaydını temizlemenin, aramanızı geri almak için çalışmamanın @/=""yan etkisi vardır n. :nohÖnceki aramayı yeniden kullanmak için kayıtta tutmayı tercih ederim .
jbyler


10

Eğer varsa incsearch.vim eklentisi yüklü, daha sonra arama yaptıktan sonra otomatik olarak açık vurgulamak için bir ayarı vardır:

let g:incsearch#auto_nohlsearch = 1

resim açıklamasını buraya girin


8

VIM ve GVIM için Janus, benim gibi yeni başlayanlar için bir dizi pişmiş şey içeriyor

<leader>hs - toggles highlight search

tam da ihtiyacınız olan şey bu. Sadece \hsnormal moda yazın. (Lider anahtarı \varsayılan olarak eşlenir .)

HTH.



7

İmleci hareket ettirdiğiniz anda vurgulamayı kapatın:

Vim-cool'u takın . Bu özel sorunu gidermek için oluşturuldu. İmleci hareket ettirdiğiniz anda vurgulamayı kapatır. Yine de uyarılmak, yeni bir vim sürümü gerektirir!


6

Bu, updatetimemilisaniye kullanılmadığında arama vurgulamasını temizler .

updatetimevarsayılan olarak 4000ms veya 4s'dir ancak benimkini 10'lara ayarladım. Sadece updatetimebundan daha fazlasını yaptığını unutmamak önemlidir, bu yüzden değiştirmeden önce dokümanları okuyun.

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

6

Eğer muktedir istiyorsanız / devre dışı vurgulama hızla , sen bir anahtar eşleyebilirler

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

Yukarıdaki pasajı .vimrc dosyasına koymanız yeterlidir.

Bu, bir şarkı tuş vuruşuyla arama vurgulamasını göstermenin ve gizlememin en uygun yolu

Daha fazla bilgi için http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches belgelerine bakın.


5

En iyi 2 yanıtı birleştirerek bir çözüm daha:

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

İle arama kaydını temizlemenin, aramanızı geri almak için çalışmamanın @/=""yan etkisi vardır n. :nohÖnceki aramayı yeniden kullanmak için kayıtta tutmayı tercih ederim . Sen bağlayabilir <F3>ile bunannoremap <F3> :noh<CR>
jbyler


4

Sadece basit nohl'u kullanıyorum ve eklenti gerekmiyor.

:nohl


4

Benim tahminime göre asıl soru devre dışı bırakmamak arama vurgulamayı değil, sadece son aramadan vurgulamayı temizlemekle ilgilidir. Orijinal posterin bahsettiği anlamsız bir dize arama çözümü, bir süredir daha önceki bir aramadan vurgulamayı temizlemek için kullandığım, ancak çirkin ve hantal.

nnoremap ...~ / .Vimrc'e eklemek için bulduğum birkaç öneri, vim'i başlangıçta değiştirme moduna geçirme etkisine sahiptir, bu da istediğim şey değildir. Bulduğum en basit çözüm satırı eklemektir

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

~ / .vimrc. Bu KISS prensibine göre değişir ve tek bir <esc> kullanarak ok tuşlarını engellemez. Önceki bir aramadan vurgulamayı temizlemek için komut modunda (veya ekleme veya değiştirme modundan üçlü <esc>) bir çift <esc> gerekir, ancak UI perspektifinden bu işlem işlemi mümkün olduğunca basitleştirir.


Ok tuşlarına müdahale eden tek <esc> ile ne demek istiyorsun?
hansmosh

1
@hansmosh Bkz. unix.stackexchange.com/questions/28713/… .vimrc'de aşağıdaki gibi iki satır kullanıyorum nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
Lindsay Haisley

4

Bende aşağıdakileri kullanıyorum ~/.vimrc

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

Bu, mevcut vurgulanan aramayı temizlemeyi çok kolay ve hızlı hale getirir. Lider anahtarımla eşleştirildiğinden, \sağ pinky parmağım ve baş parmağımla eylemin gerçekleştirilmesi çok kolay.


3

Sanırım @ShaunBouckaert ve Mar 19 '09 saat 16:22 cevaplar iyi bir uzlaşma:

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

EnterArama vurgulaması etkinken düğmesine basın ve vurgulanan metin artık vurgulanmaz.


3

aşağıdaki gibi arama sonucunu açmak / kapatmak için noremap kullanabilirsiniz

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


3

@ Baruch-even yanıtını temel alarak ESC, normal moddayken çift ​​basıldığında arama terimini silebilirsiniz :

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

Sanırım ikinci bağlanma yolunda, ama birincisi tehlikeli. Yeniden eşleme <esc>GUI vim'de iyi çalışır, ancak bir terminalde vim çalıştırılırken ok tuşları ve diğer ESC kodlu tuşlarla ciddi sorunlara neden olur . Gözlerinde farklı koydu etmeyin ~/.vimrc sararak olmadan if has('gui_running')... end. Ayrıca durum çubuğundaki komutun <silent>yanıp sönmesini önleyenleri eklemeyi düşünün :noh.
jbyler

1

Ben de sevmiyorum. Ben :nohlher zaman girmek için yorucu buldum ... bu yüzden benim aşağıdaki haritalama koymak benim.vimrc

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

İlk bit ( :nohl<cr>) vurgulamayı temizler; ikinci bit ( :<backspace>) komut satırını temizlemek için bir püf noktasıdır . Arama arka planda hala oradadır, bu yüzden sadece vurursanız nyeniden vurgulanır ve sizi bir sonraki tekrarlamaya götürür.


1

Bunu dosyama ekledim vimrc.

command! H let @/=""

Bir arama yaptıktan ve aramaları vurgulamak istediğinizde :H


1

Alternatif olarak .vimrc dosyanıza şu şekilde eşleme ekleyebilirsiniz:

nmap <C-N>: nohlsearch

ve sonra

Ctrl + N

vurgulanan metni temizlemek için


Lütfen bu soruda zaten mevcut olan diğer cevaplar üzerinde geliştiğinden emin olmak için cevabınızı düzenleyin .
Ocak'ta hongsy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.