Vim'in bir değiştirme işleminden sonra maçları vurgulamasını nasıl önleyebilirim?


13

Ben set hlsearchskinTenimde ~/.vimrc. Bu normalde çok kullanışlıdır, ancak böyle bir değişiklik :nohyaptıktan sonra yapmak zorunda olmak can sıkıcıdır '<,'>s/$/',/(çalıştırdıktan sonra her satırın sonunu vurgular). vimBu şekilde değiştirdikten sonra nasıl vurgulanmam?

vim7.2 ile Ubuntu 9.04 kullanıyorum . OS X 10.6'da da aynı problem var ( vim7.2). Her ikisinde de işe yarayacak bir şey arzu edilir olacaktır.

GÜNCELLEME: Aldığım tüm yanıtlar sadece yapılacak bir anahtar eşleme :noh(veya eşdeğeri) ekliyor . Gerçekten alışacağım özel anahtar davranışlarından kaçınmaya çalışıyorum, ama sonra onlarsız (örneğin bir arkadaşınızın bilgisayarında, vb.) Değiştirme yaptıktan sonra vimotomatik olarak yapmak istiyorum :noh. Yani, sadece veya (belki birkaç başka vaka) hlsearchkullanırken istiyorum , ama başka zamanlarda değil./*

Yanıtlar:


7

Kalıcı olarak devre dışı bırakmak istemiyorsanız, bu cevapta önerildiği gibi vurgulamayı stackoverflow'daki benzer bir soruya geçirmek için bir anahtarı bağlayabilirsiniz .

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

Vurgulamayı kalıcı olarak devre dışı bırakmak istiyorsanız:

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 SSS sayfasından )


2
Bu seçeneğin farkındaydım. Sorun genellikle değilim ki arama ben değiştirmek istiyor ne ben değiştirmeniz çoğu durumda vurgulamak anlamsız nedenle, için. Ancak, ne zaman için çok kullanışlı am gitmesine istemiyorum bu yüzden, bir şey ararken tamamen uzak.
Benjamin Oakes

@ Benjamin: Bunu dolaylı olarak aradınız. Bu ne: s yapar. Bir kalıp arar ve ardından eşleşmeler üzerinde bir dönüşüm gerçekleştirir. Kullanmak: nohl, bir sonraki arama yapılana kadar mevcut arama modelinin vurgulamasını kapattığı için doğru çözümdür. Bunu, 'hlsearch' seçeneğinin durumunu değiştirmeden veya önceki arama teriminin kayıtlı değerini etkilemeden yapar.
jamessan

2
@jamessan: Bunun bir arama ve değiştirme olduğunu anlıyorum . Sadece o zaman vurgulanması gerekmiyor. Çoğunlukla her şeyden çok bir sıkıntı.
Benjamin Oakes

Kısa bir süre önce, öne sürdüğünüz gibi vurgulamayı kapatmaya ve istediğim zaman açmaya başladım. Hala mükemmel değil, ama daha iyi.
Benjamin Oakes

9

Her ikisi de nüanslı farklı davranışlara sahip iki farklı çözümüm var. Benim favorim seçenek 2:

  1. .Vimrc dosyamda şu 2 satır var:

    autocmd cursorhold * set nohlsearch
    autocmd cursormoved * set hlsearch
    

    İlki, imleç hareket etmez ve hlsearch'ü kapatırsa zaman aşımı (yapılandırılamaz) için bekler. İkincisi imleç tekrar hareket ederse tekrar açar.

    Mükemmel bir çözüm değil, ama benim için çalışıyor (ve zaman aşımı yapılandırılabilir olduğunda mükemmele yakın olacak - şimdilik, zaman aşımı vim için yerleşik bir zamanlayıcıya bağlı.)

  2. Veya şu satırları deneyebilirsiniz:

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

Bu, imleç hareketi olmayan kısa bir zaman aşımından sonra hlsearch'ü kapatır ve standart arama komutları için tekrar açar. Hlsearch'ü tekrar etkinleştirmenin tüm olanaklarını kapsamaz, ancak kavram kanıtı için bir başlangıç ​​yeterlidir.


Güncelleme için teşekkürler - şimdiye kadar görmedim. (Görünüşe göre siz de eklediniz mi? Komik ki.) Bu harika bir kavram; Onunla oynamak zorundayım.
Benjamin Oakes

2 uyarısı, görsel mod ile arama Vyapmaz
Bryce Guinta

Seçenek 1'deki ilk satırı aşağıdakilerle değiştirdim autocmd cursorhold * set nohlsearch | let @/ = "" Bu, arama kaydını temizleyecek ve vurgulamayı kaldıracaktır. Bu kurulum ile çok zaman geçirdim ama ben burada sonunda olanlar için orada koymak istedim.
Berkeley Martinez

2

Vurgulama kurtulmak için sadece "/ asdf" ("asdf" dosyada olmadığını varsayarak) yazın. Oldukça basit olduğunu biliyorum, ama benim için çalışıyor.


2
Bu aynı fikir :noh, ama her zaman işe yaramıyor. :) Komik, ancak şunu söyledin: Ben her zaman adını yazmış bir arkadaşım vardı çünkü yazdığı şeyde "asdf" gibi bir şeyden daha az sıklıkta gelirdi. (Çok komik, sanırım.)
Benjamin Oakes

Doğru. Belki hatırlarım: bir dahaki sefere hayır.
Greg Graham

1

Aşağıdakileri .vimrc dosyanıza koyun:

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

Bu, vurgulanan arama terimini sessizce gizler, ancak :set hlsearchözelliği devre dışı bırakmaz . Bir sonraki aramada tekrar etkinleştirilir.


Bu amaç için tasarlanmış yerleşik komutu kullanmak daha iyidir - nohl. Ardından, bir sonraki eşleşmeye atlamak, hiçbiri belirtilmediğinde bir desenin varsayılan değeri, vb. Gibi şeyler için kullanılan arama kaydınızın içeriğini havaya
uçurmazsınız

Evet, ama bir sonraki arayışımın tahmin edildiği gibi vurgulanmadığı beni kızdırdı. Bu yüzden bu hızlı çözümü buluyorum. Kirli de olabilir ama işe yarıyor. Ben bunun için vim için kabul edilebilir olduğunu düşünüyorum - gerçek, büyük bir projenin kaynak kodunda "kirli" şeyleri kullanmasam bile.
Gregor Müllegger

1

Başka bir olasılık, @/değiştirme işlemini yaptıktan sonra kaydı (aslında bir okuma-yazma kaydıdır) sıfırlamaktır . Bu, önceki vurguyu geri yükler:

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

Ancak, bunun hala birkaç sorunu vardır:
- değiştirmek yerine :syeni bir komut tanımlar. Kullanmak mümkün olsa da cabbrevharitaya :sgöre :S, ben gibi tüm yapılar yakalamak için hiçbir yol biliyorum :<range>s.
- :nohldaha önce yalnızca bir aramayı gizlemek için kullandıysanız , önceki arama yeniden vurgulanır. :nohlÖnceden çağrılıp çağrılmadığını bulmanın bir yolunu bilmiyorum . (Bunun etrafında dolaşmak ve :nohlkomutu geçersiz kılmak mümkün olabilir , ancak bu aynı zamanda çok fazla olabilecek tüm arama komutlarının da geçersiz kılınmasını gerektirir ...).

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.