Nohlsearch ve: set nohlsearch arasındaki işlevsel fark nedir?


13

Bunu kullandığımda :nohlsearchaslında aynı şeyi yapmadığını fark ettim :set nohlsearch.

Özellikle, hlsearchayar gerçekte kapatılmaz (ki bu :set hlsearchgerçekleşir).

Ne demek istediğimi göstermek için:

:set hlsearch
:nohlsearch
:echo &hlsearch

Bu yazdırılıyor 1( hlsearch hala ayarlı! )

:set hlsearch
:set nohlsearch
:echo &hlsearch

Bu yazdırılıyor 0çünkü hlsearch, vim'de bir ayarı kapatmak için standart yolu kullanarak kapattık.

Merak ediyorum, çünkü :nohlsearchex komutunun var olması için gerçek bir neden olmalı .

Neden :nohlsearchumursam , şimdi vim komut dosyasında arama vurgulamanın etkin olup olmadığını sınama ihtiyacım var ve diğer komut dosyalarında ": nohlsearch" yerine kullandığım için testim &hlsearchher zaman geri dönüyor 1. Bu yüzden artık nohlsearchex komutunu kullanmadan neyi değiştirdiğimi merak ediyorum .

Yanıtlar:


15

itibaren :h :nohlsearch

                                                        : noh: nohlsearch
: noh [lsearch] 'hlsearch' seçeneği için vurgulamayı durdurun. O
                        bir arama kullanılırken otomatik olarak tekrar açılır
                        komutunu girin veya 'hlsearch' seçeneğini belirleyin.
                        Bu komut bir otomatik komutta çalışmaz, çünkü
                        vurgulama durumu kaydedilir ve geri yüklendiğinde
                        otomatik komut yürütme autocmd-searchpat.
                        Bir kullanıcı işlevini çağırırken de aynı şey geçerlidir.

Önemli nokta, yeni bir arama başlattığınızda vurgulamayı otomatik olarak tekrar açmasıdır. :set nohlsearchaslında hlsearchkapanır, yani bir dahaki sefere vurgulama yapılmadığında arama yaparsınız.

Örnek: Varsayım hlsearchaçık, Şu anda bir arabellekte "merhaba" arıyorsanız, tüm "merhaba" lar vurgulanacaktır. Eğer :nohlsearchhiçbir şey kullanırsanız vurgulanır. Fakat daha sonra "dünya" yı ararsanız, tüm "dünyalar" vurgulanır. Kullanmış olsaydınız set nohlsearch"dünya" vurgulanmazdı.


Ayrıca, bu komutun temel olarak bir kullanıcı işlevi içinde hiçbir şey yapmadığını unutmayın. Örneğin,

function! NoHlsearch()
    nohlsearch
endfunction

çalıştırıldığında görünür bir etkisi yoktur.


Hlsearch'ün gerçekten etkin olup olmadığını görmek için değişkeni kontrol etmek istersiniz v:hlsearch. Ne zaman v:hlsearch = 0vurgulama kapalı ve ne zaman v:hlsearch = 1vurgulayarak üzerindedir. Muhtemelen &hlsearch = 1kontrol etmeden önce emin olmalısınız v:hlsearch.

itibaren :h v:hlsearch

                                        v: hlsearch hlsearch değişkeni
v: hlsearch Arama vurgulamanın açık olup olmadığını belirleyen değişken.
                Yalnızca 'hlsearch' etkinleştirilmişse mantıklıdır.
                + Extra_search. Bu değişkeni sıfıra ayarlamak benzer davranır
                : nohlsearch komutu.
                        hadi & hlsearch = & hlsearch

Ne demek istediğini bir fonksiyonun içinden "temelde hiçbir şey" ile açıklayabilir misin? Standart şeyi yapar (bir sonraki arama çağrılıncaya kadar aramayı vurgulamayı geçici olarak durdurur).
Steven Lu

Ben de geçici geçici olup olmadığını kontrol bayrağına erişmek için bir yol bulmayı umuyorum :nohlsearch... Bence yokluğunda ben :nohlsearchbir değişken ile tüm çağrıları izlemek için başvurmak zorunda .
Steven Lu

@StevenLu düzenlemeleri gör.
FDinoff

Teşekkürler. Ben bunu yaparak "temelde hiçbir şey yapmıyor" yönü etrafında kesmek kullandığınız kodu gibi görünüyor: nnoremap <silent> <expr> <boundkey> SearchHighlight()nerede SearchHighlight()bir dize döndürebilir ":silent nohlsearch\<CR>". Ayrıca v:hlsearchbahşiş için teşekkür ederim , sadece ihtiyacım olan şey.
Steven Lu

1

Komut dosyanız mevcut vurgulama durumunun bilinmesini gerektiriyor mu?

hlsearchYalnızca geçerli aramayı kapatmak için şunu kullanırım Ctrl-l.vimrc dosyamda:

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

Yukarıdaki komutu kullanırken arama vurgulama sonraki arama ile geri döner. Ctrl-lkullanışlıdır, çünkü normal kullanımı ekranı temizlemek ve yeniden çizmektir.

Arama vurgulama durumunu sürekli olarak açmak veya kapatmak için, geçişim olarak F3 kullanıyorum:

nnoremap <F3> :set hlsearch! hlsearch?<CR>
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.