Vim - arama ile vurgulanan metni seçme


53

Vim'de sık sık oraya gitmek yerine bir kelimeye veya cümleye atlamak için arama yapıyorum h/j/k/l. Sonra nolaylar arasında atlamak için çarptım.

Diyelim ki bu metni aldım:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

Ben yazarken /an arrowve butonu tıklayın. Bu ifade vurgulanır ve ben de ona atlarım n.

Şimdi görsel olarak o metni seçmek istiyorum , belki değiştirmek ya da silmek için. (Evet, :sikame komutunun farkındayım .)

İmleci "ok" başında "a" harfi olduğundan, vurabilirim v, sonra etüm ifadeyi vurgulamak için birkaç kez basın . Ama daha kısa ve anlamsal bir yol olduğunu hissediyorum. Sonuçta, ilgilendiğim metni zaten belirttim.

"Geçerli arama seçimini görsel olarak seç" diyen bir komutu nasıl oluşturabilirim ?

Yanıtlar:


38

gn7.4 sürümünden sonra kullanabilirsiniz (ve gNgeriye gitmek için). Numarayı değiştirir v//e.

Son kullanılan arama modelini `n` gibi ileri doğru arayın ve eşleşmeyi seçmek için Görsel modu başlatın.

Daha fazla bilgi için :help gnveya bu Vimcast'e bakınız .


Bu, başka bir cevaba yapılan yorumu kopyalar ve olduğu gibi pek kullanışlı değildir. Dokümanları aktardıysanız, cevabınız kendi başına durması iyi bir fikir olabilir.
bwDraco,

2
Cevabı daha iyi hale getirmek için mutluyum ama bunun yardımcı olup olmadığından emin değilim. Soru, objeyi özenle ortaya koyar ("sonraki arama sonucunu görsel olarak seç") ve gnaynen istendiği gibi yapılır. Bunu ayrı bir cevap olarak sunmak, bunun yerine tam bir alternatif olduğunu vurgulamaktadır v//e. Dokümanları eklemek için cevabımı yeni düzenlemiştim, bu daha iyi mi?
David Lord,

Bu iyi, teşekkürler. Yardıma ihtiyacınız olursa, tur ve yardım merkezini kontrol ettiğinizden emin olun . Super User'a hoş geldiniz; konaklamanızdan memnun kalacağınızı umuyoruz.
bwDraco

1
Fantastik! Bu konuyu en son ve en büyüklerle güncellediğiniz için teşekkür ederiz. :)
Nathan Long


8

Tek v//ebaşına yetersiz olduğunu gördüm çünkü görsel moddan çıktıktan sonra, sonraki / önceki arama sonucuna atlamak imleci normalde beklediğiniz gibi başlangıç ​​yerine yerine bırakıyor.

Bunu düzeltmek için önce arama sonucunun ( //e) sonuna atlamalı, sonra görsel olarak başlangıcına ( v??) seçmeliyiz :

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

Şerefe.


Simetri için: nnoremap g? ??b<cr>v//e<cr>(aynısını yapar ama ileriye doğru geriye doğru arama yapar)
Kyle Strand

2

Artık Vim'in arama eşleşmelerini normal metin nesneleri olarak ele almasını sağlayan bir Vim-Arama-Nesneleri eklentisi var, bu yüzden va/bir arama yaptıktan sonra basitçe (bir eşlemeyi görsel olarak seçebilir) yapabilirsiniz.


1

Bunu yapmanın "aptal" bir yolu, aşağıdaki gibi bir anahtarı (bu durumda F5) eşlemektir:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

/an arrowF5'e basıldıktan sonra .


Bu nedeniyle bir karakter daha seçer +1. Bunu atlayın ve yalnızca aranan kısmı seçer. Öte yandan, nnoremap <F5> v//e<CR>iyi çalışıyor gibi görünüyor.
Dennis Williamson,

@Dennis Williamson, + 1 aranan öğeyi seçmek için gereklidir, + 1'i kaldırırsanız son karakter seçilmez çünkü imlecin bulunduğu karakteri seçmez. <F5> v // e <CR> normal haritasındaki herhangi bir yol çok daha iyidir.
Johnny

Benim için karakter seçer. Sizin yaptığınız xya da cyaptıktan sonra tuşuna basarsam, F5ancak +1imlecin altındaki karakter de dahil olmak üzere tüm arama dizesi olmadan silinir.
Dennis Williamson,

@Dennis Williamson, 'seçim' seçeneğimin "özel" olarak ayarlandığını öğrendim, ancak varsayılan değer "dahil" dir. Bu yüzden +1 olmadan sizin için çalıştı. (Bkz: Yardım seçimi)
Johnny
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.