Vim / Vi'de imleci bir arama vurgusunun sonuna hareket ettirme komutu var mı?


86

Vim / Vi'de seçili bir arama segmenti içinde hareket etmek için herhangi bir komut var mı?

Örneğin, bir kelime ararsam, imleci vurgulanan kısmın sonuna hareket ettirmek için herhangi bir komut var mı? "FishTaco" diye bir kelimem olduğunu ve "Balık" ın tüm örneklerini aramak ve ardından bir şey eklemek istediğimi varsayalım. Genel bir değişiklik yapabileceğimi biliyorum, ancak değişikliği yalnızca sıralı olmayan birkaç örnekte yapmak istersem?

Bir eylemi gerçekleştirmek için imleci geçerli vurgulanan bölümün sonuna hareket ettirmenin uygun olacağı yeri görebiliyordum.


3
Bu soruya bir cevap değil, ancak tüm değiştirmenin nihai hedefe ulaşmak için Fishbirlikte FishTaco, yapabileceğin :%s/Fish\(Taco\)\@!/&Taco/her sahipliği yapan, Fishzaten takip etmediği Tacove ile değiştirin FishTaco. Negatif önden arama aramasını, eşleşen terimi ve ardından gelen bir değiştirmeyle birleştirir Taco.
Jim Stewart

@JimStewart Bu yorumun neden en az cevap kadar +1 içermediğine dair hiçbir fikrim yok. Bu ninja seviyesi vim.
Still.Tony

Yanıtlar:


135

Bunu bununla yapabilirsiniz:

/Fish/e

/eSonunda arama bölgenin (yerine varsayılan olarak ilk karakterin sonunda imleci iniyor.


32
İmleci sondan önce veya sonra n karakter koymak için + n veya -n ekleyebileceğinizi unutmayın .
Nathan Fellman

10
/FishAramayı zaten yaptıktan sonra //e, Vim 7.4 ile sona atlayabileceğinizi gnve bulunan sonucu görsel olarak vurgulamak için kullanabileceğinizi belirtmek gerekir.
2014

İmleci vurgulanan eşleşmede bulmak için daha fazla seçenek olan @ghbarratt yanıtına da bir göz atın .
Nima

82

İmlecinizi Fish'in son karakterinin sonrasına yerleştirmek istiyorsanız, o zaman kullanabilirsiniz.

/Fish/e+1

imlecinizi h işaretinin sonrasına yerleştirir. (Olmadan+1 İmleç olmadığında, son karakterin solunda sona erecektir.)

İmleci Fish'in arkasına yerleştirmekle özellikle ilgileniyorsanız, ancak yalnızca "FishTaco" da göründüğünde aşağıdaki seçeneklerden birini deneyebilirsiniz:

Kullanabilirsiniz

/FishTaco/s+4

ve imleciniz Fish ve Taco arasında kalacaktır. /s+44 yer arama terimi başladıktan sonra imleci yerleştirir.

Sen de kullanabilirsin

/FishTaco/e-3

bu, imlecinizi son (son) karakterin sol tarafının 3 basamak soluna yerleştirecektir.

Ayrıca kullanabilirsin

/FishTaco/b+4 

çünkü /b+4olarak değerlendirilecek /s+4.


14
Harika bir açıklama, ama şimdi sadece açım.
kenny

28

Zaten aradıysanız, son aramayı tekrarlayan, ancak zaten açıklanmış olan değiştiriciyi ekleyen, ile /Fishmaçın sonuna gitmek için aramayı hızlı bir şekilde değiştirebilirsiniz .//ee


1
// e + numarası tam olarak aradığım şeydi! harika.
arkod

13

/ long-regexp1 \zs long-regexp2 / .. imleç \ zs konumunda duracak , bakınız: yardım \ zs


12

Görsel bir seçim yaptıktan sonra o, imleç konumunu seçili bloğun başlangıcı ve bitişi arasında değiştirmek için kullanabilirsiniz . Seçim satır bazında olduğunda, bu, satırı değiştirir konumunu değiştirir, yani imleç seçimin başlangıç ​​ve bitiş satırına hareket eder ancak başlangıç ​​veya bitiş karakterine hareket etmez. Seçim karakter açısından yapıldığında, hareket de karakter bazındadır.

Ayrıca kullanabilirsin `< ve `>o sıfırlamak veya seçim sınırlarını ayarlamak için kullanılır yani ancak bu, seçimi kendisi etkiler, başlangıç ve görsel bloğunun sonu arasındaki imleci geçiş yapmak için.

Düzenleme: Ah, ancak arama vurgularında bu işe yaramaz, çünkü obir satır eklemeyi başlatır. Sanırım aramayı vurgulama görsel bir seçimle aynı şey değil, üzgünüm :)


Ben de bilmiyordum. Bu, baştan başlamadan bir seçimin başlangıcını değiştirmek harika. (örneğin, seçime bir kelimeye çok erken veya çok geç başladınız)
Timothée Boucher

9

Sorunuzun "maçın sonundaki imleci" kısmı zaten cevaplanmıştır.

Yapabilirsin :%s/Fish/FishTaco/c. Bu size her değişikliği onaylama veya reddetme ve tüm "maçın sonunda imleci" atlama fırsatı verir.


Harika bir ipucu. 'Y' girersem, değiştirme işlemini yalnızca ilkinde gerçekleştirir. Her biri için nasıl onaylatırım?
Jordan Parmer

1
Bu yazmanız için bir sonraki maç ve bekler gider yya nve böylece sol eşleşme kalmayıncaya kadar üzerinde. Diğer tüm değiştirmeleri kabul etmek için yazın a, reddetmek için yazın q.
romainl

1
Aslında gfinalden sonrasını kaçırıyordum, /bu yüzden çizgimde devam etmiyordu. Bahşiş için teşekkürler.
Jordan Parmer
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.