Arama bittikten sonra “hlsearch” otomatik olarak nasıl kapatılır?


19

"Hlsearch" ayarını seviyorum, ancak aramayı bitirdikten sonra iğrenç buluyorum. Özellikle de çok fazla eşleşme olan bir şey ararsam. Bunu kapatabileceğimi biliyorum

:set nohlsearch

Ama bu 16 tuşa basmayı gerektiriyor ve daha da can sıkıcı bir şekilde, bir sonraki aramam için tekrar açmam gerekiyor

:set hlsearch    

Hlsearch'ün aramaya başladığımda otomatik olarak açılmasını ve aramayı bitirdiğimde kapatmamın bir yolu var mı? Örneğin, ekleme moduna girersem veya metni değiştirirsem, hlsearch ek tuş vuruşları olmadan kapatılsın mı?


3
Otomatik olarak tanımlayın.
Antony

@Antony Düzenlemelerde veya ekleme modunda olduğum gibi, herhangi bir düğmeye basmaya gerek kalmadan kapanacak. Birlikte aramaya başlarsa /ya ?ya ben basına nya N, benim artık düğmelere basmak için gerek kalmadan açılır.
DJMcMayhem

1
Oh ve tanımlamak "bitti" arama
Christian Brabandt

1
:nno <BS> :set hls!\|set hls?<CR>- bir satır, bir tuşa basma, durum geri bildirimi ve vurgulamayı isteyip istemediğinizi veya istemediğinizi ikinci olarak tahmin etmeye çalışmaz. Bazen düzenleme sırasında ekranda sol vurgulamak istiyorum. Bazen yapmam, örneğin /operatörle hareket olarak kullanma .
Antony

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

Yanıtlar:


26

Çok daha uygun bir yol var. Kullanmak yerine

:set nohlsearch

aslında hlsearch ayarını kapatır,

:nohls

Bu, yalnızca tekrar arama yapana kadar hlsearch özelliğini kapatır. itibaren: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.

Ancak, bu çözüm mükemmel değildir, çünkü :nohlsher aramadan sonra hangi acıyı yapacağınızı yazmanız gerekir . Bir eşleme ile bunun üstesinden gelebilirsiniz, örn.

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

Ama daha da iyi bir çözüm var! haya14busa / incsearch.vim . Bu, en azından bence, önemli bir vim eklentisidir. Ana özellik, normal ifadenizi yazarken tüm arama eşleşmelerinin gerçek zamanlı olarak vurgulanmasıdır. Örneğin:

resim açıklamasını buraya girin

Bununla birlikte, ikincil bir özellik de, aramayı başlattığınızda / durdurduğunuzda hlsearch'ü hemen açıp kapatma seçeneğidir . Bu özelliği etkinleştirmek için,

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#)

sizin .vimrc.

Başka neşlemeleriniz varsa, bunları kapatmanız gerekir. Örneğin,

nnoremap n nzz
nnoremap N Nzz

Bu iki eşleme birbirleriyle uyumlu değildir!


Kendi kendine bir cevap yaptığınız için ben de başka bir sorun eklemek öneririz set hlsearch. Eğer tanımladıysanız, her kaynak yaptığınızda vimrcüzerine yazılır . Ben dışarı bu sıralamak için skinTenimde . (Ve bu eklentinin çözdüğü başka bir sorundur.):nohvimrcif !&hlsearch | set hlsearch | endifvimrc
grochmal

Dunno, bana çok fazla kazanç sağlamak için bir kod yığını gibi görünüyor. Aslında, artımlı aramanızın hedefinin fark edilmesini zorlaştırır ve hızlı gezinme için daha az kullanışlı hale getirir.
Antony

Harika bir eklenti sorusunu cevaplamak ve çok daha fazlasını yapmak için +1!
RichVel

7

vim-cool sadece bunu yapan basit bir eklentidir.

Vim-cool, aramayı tamamladığınızda arama vurgulamayı devre dışı bırakır ve tekrar aradığınızda yeniden etkinleştirir.

O inşaat remapping olmadan tarafından kullanılarakCursorMoved ve InsertEnterautocommands.


Bu teknik (autocommands kullanarak) cevabımdan çok daha iyi ve benim yazdığımda bunu düşünmediğime inanamıyorum. Oyla.
Zengin

5

Kullandığım <Leader><Enter>için bir kısayol olarak :noh. (Liderim ,, bu yüzden oldukça yakın)

Bu, bir sonraki aramaya kadar vurguları kapatır.


3

Kendi cevabınızda daha önce de belirttiğiniz gibi , tüm özelliği kapatmak ve bir sonraki aramada tekrar açmak yerine , vurgulamayı :nohlsearchkomutla (kısaltılabilir :noh) kapatmak çok daha etkilidir .

iEkleme moduna her girdiğinizde vurgulamayı kapatmak istiyorsanız , bunu yapmak için basit bir eşleme oluşturabilirsiniz:

:nnoremap i :noh<cr>i

Okuyucunun, vurgulamak istedikleri diğer komutlar için benzer eşlemeler oluşturması bir alıştırma olarak bırakılmıştır.


2

Bu aptalca veya naif gelebilir, ancak vurgulamayı durdurmak istediğimde, belgede (neredeyse kesinlikle) bulunmayan rastgele bir dize aramaktır. Bunun gibi bir şey:

/skljdfhadhfs

Verilen, birkaç tuş vuruşunu alıyor, ancak gerçekten rastgele, bu yüzden hemen yazılabilirler.


1
Ama bu işe yaramıyor nve Nartık çalışmıyor ve :%s//somethingya da gibi şeyler :g//something. Ayrıca arama geçmişinizi
tıkar

Evet, ancak (muhtemelen yanlış) varsayımım, artık vurgulamanız gerekmediği için, o aramayı da önemsememenizdir. Arama geçmişini karıştırmak, buna güveniyorsa gerçek bir konudur.
Kostas

1

Ben yeniden eklemek için daha sezgisel buldum Ctrl- dahil Lboya :nohls::

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

Vi ve Vim'e Hoşgeldiniz ! Kuşkusuz eski bir soru hakkındaki bilginizi paylaştığınız için teşekkür ederiz. Yüksek kaliteli cevaplar, fark etmiş olabileceğiniz gibi, genellikle kodun ne yaptığının bir açıklaması ile birlikte gelir (bu özellikle çok fazla bilgiye sahip olmadan buraya gelebilecek yeni vimmerler için yararlıdır). İlgili :helpbölümler için de iyi bir fikir olabilir !
D. Ben Knoble

0

Kullandığım <Leader><Enter>kısayol olarak :hlsve mekan olarak benim lider grubuna sahiptir.

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

Bir öğeyi aradıktan sonra vurgulanır, kapatmak için tuşuna basın <Space><Esc>. Arama sonuçlarını yeniden görüntülemek istediğinize karar verirseniz, tuşuna basın <Space><Esc>. Bu hls!yöntem, bu tuş bağını, hls(kısayol hlsearch, yani arama sonucu vurgulama) !ayarını değiştirmek (böylece ayarı hemen önünden değiştirmek için ) arasında geçiş yapmak üzere eşleştirir .


-1

Bu makroyu .vimrc'nize ekleyin

map #h :set hls!<CR>

Bu, #h ile hilighting'i değiştirmenize izin verir


Bu James Affleck'in cevabından farklı değil.
jamessan

Benimki daha özlü görünüyor.
Darrel Lee

Kısalık neden önemlidir? Diğer gönderi, komutun bölümlerinin ne anlama geldiği hakkında daha fazla bilgi verir ve bu gönderi ek içerik sağlamaz.
jamessan
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.