Vim'de seçilen metin nasıl aranır?


61

Bir /şeyi aramak için ardından bir regex kullanabileceğimin farkındayım . Ve ?geriye doğru arama yapmak için kullanabilirim . Ve kullanabilir nve Nileri ve geri arama tekrarlamak.

Ayrıca iki tane güzel kısayol vardır: *veya #imlecin altındaki kelimeyi arayacaktır (ileri / geri). Bu çok kullanışlı! (orada da g*ve g#varyantları)

Ancak ... Görsel modu ( v) kullanarak metni seçtikten sonra , Vim'den tam olarak o metni aramasını nasıl isteyebilirim? Hızlı bir bakış :helpvermedi ... ha ... help me.



İle ipuçları için teşekkürler *ve #! Sorunuz ayrıca ne yapacağını g*ve ne yapacağını da g#
açıklarsa iyi

Yanıtlar:


22

Aşağıdaki sıra, önceden seçilmiş bir metin bloğu verildiğinde istediğinizi yapar:

  • y(seçilen metni "varsayılan olarak kayıt defterine kopyalayın )
  • / (arama moduna girin)
  • ( \ V) (isteğe bağlı, "çok sihir yok" moduna girin *)
  • Ctrl+ r "( "kayıt defterinden metin ekle )
  • Enter (Tut!)

(*) "çok sihir yok" modu, aşağıdaki metni regex yerine düz metin olarak yorumlar. Ancak, bunun özel olduğunu \ve /başka şekillerde ele alınması gerektiğini unutmayın . Metnin özel sayılan karakterleri yoksa, bu adımı atlayabilirsiniz.

Kaynak: Vim İpuçları Wiki


1
Teşekkür ederim! Bu, vim.wikia sayfasındaki "Nasıl Yapılır" dan çok daha anlaşılabilir bir durumdur
winklerrr

64

Önce ışıklandırılmış metni yakabilirsin. Sonra

  • /

  • Ctrlr

  • "

Bundan sonra neye battığını yapıştırırsın /.


7
Güzel fikir ... yapıştırılan metnin istenen olmayan bir regex olarak yorumlanması dışında. :-(
Denilson Sá Maia

4
Bu senin için neredeyse yeterince iyiyse, /\V<C-r>"onun yerine yapabilirsin. \VArama sorgunuza hazırlanarak vim'e "çok sihir" kullanmadığını söylersiniz. Ters eğik çizgiler hala sorunlara neden olabilir. Bakınız:help \V
idbrii

3
Ctrl+RBir sicile nasıl erişeceğinizi ve *sadece sistem pano sicilini açıklamanıza yardımcı olabilir . Örneğin, şunları da yapabilirsiniz: yawbir kelimeyi sicile kaydetmek "(varsayılan sicil), sonra /<C-r>"o dizgiyi aramak için.
Ben Davis

5
@ DenilsonSá - Bu çözümü kullanabilirsiniz, ancak /arama yapmak için kullanmak ?yerine, yerine ters aramalar varsayılan olarak eğik çizgilerden kaçtığı için kullanın. Ardından Naramanızı ileri yönde devam ettirmek için basabilirsiniz .
Brad Parks

7

Böyle bir özelliğe duyulan ihtiyacı hiç hissetmedim, ancak Vim'de herhangi bir özelliğe ihtiyaç duyduğunuz düşünülürse, bunun yardımcı olması gerektiğini düşünüyorum:

Görsel olarak seçilen metni ara

Test etmedim, ama koda bakarak, tam olarak aradığınız şey gibi görünüyor.


4

Bu davranışı yaratmanın bir yolunu burada vim wiki adresinde bulabilirsiniz .


Güzel, eğik çizgilerden kurtulmak için sürümü yararlı buldum. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
zanaat

1

Bu çözüm, çok yönlü ve kaçış karakterleriyle bile vim aramalarınızı görsel olarak seçilen bağlamda güçlendirir.

İçine aşağıdaki kodu ekle .vimrcve görsel olarak seçtiğin içeriği ile ara //. Ayrıca seçilen içeriği genel olarak yerine kullanabilirsiniz /s. Veya Seçili içeriği //önce yerel olarak değiştir ve sonra görsel olarak bir bölge seç ve :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

Yukarıdaki yapılandırma sadece arama ile ilgilidir. Tüm vim konfigürasyonum için lütfen .vimrc adresini ziyaret edin.


0

İki ayrı makinedeki konfigürasyonlarımda, metin seçip vurursam /otomatik olarak seçili metni arar.


Bu varsayılan davranış değil. Burada, / düğmesine basarken (görsel moddayken), boş bir regex istemi gösteriyor, bir şeyler yazmamı bekliyor.
Denilson Sá Maia

Garip, çünkü bunu sağlayacak bir şey yapmadım.
Nathan Fellman

3
Birçok dağıtım, standart olmayan bir vim yapılandırmasını varsayılan olarak gönderir (muhtemelen standart vim config, çoğu vi uyumluluğu için birçok kullanışlı özelliği devre dışı bıraktığı için).
sleske
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.