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.