Az önce değiştirdiğim kelimenin bir sonraki tekrarına geç


12

Eğer aşağıdakilere sahipsem:

function foo(bar) {
    return bar + 1;
}

Ve kullandığım cwilk değiştirmeye bariçin baz, nasıl bir sonraki eşleştirme atlamak yok barbu yüzden kullanabileceğiniz, .aynı değişikliği yapmak için?

Kullanamıyorum *, çünkü bu imlecin altındaki geçerli kelimeyi arar ve aptalca barilk kez aramadım, bu yüzden nişe yaramaz.

Kelimeyi değiştirmeden önce olduğu gibi bir sonraki tekrarını aramanın basit bir yolu var mı ?

Ben yok ya diğer oluşumları vardır, çünkü bir arama yapmak ve değiştirmek istediğiniz barsadece iki durumlar da oldu ya çünkü değişikliğine istemiyorum Dosyamda barve ben unutmuştum :%s/bar/baz/ben başlamadan önce ve o da var Kalan tek örneği değiştirmek için çok çaba harcadık.


2
Bu, tanımladığınız iş akışını tam olarak takip etmez, ancak vim-oblik* aramayı geliştirir . Özellikle *imlecinizi hareket ettirmeden geçerli kelimeyi görsel olarak seçmenizi sağlar. Kurulduktan sonra *ciweski kelimeyi arama kaydına koymak ve kelimeyi değiştirmek için yapabilirsiniz. Sonra nve kullanabilirsiniz ..
statox

N tuşuna basıldığında, son aranan kalıbın bir sonraki tekrarına geçersiniz. Neden denemedin?
SibiCoder

... çünkü ilk olaya ulaşmak için arama yapmadım, bu yüzden nişe yaramayacak.
Roger Lipscombe

Yanıtlar:


14

Az önce değiştirdiğiniz metin cwisimsiz sicile kesildi, böylece onu tekrar kullanabilirsiniz:

/<C-r>"<CR>

son değişikliğinizin kapsadığı metnin bir sonraki tekrarına atlamak için.


5

Tam bir iş akışı olarak romainl'i uzatmak için ...

Bu tür bir düzenleme yapmak istiyorsanız ve bir paragraf / işlev üzerine aynı düzenlemeleri uygulamanız gerektiğini fark ederseniz ve "ve .kayıtlarını kullanabilirsiniz .

Örneğinizde, argümanın ilk düzenlemesini yapabilirsiniz. Görsel moda girerseniz (Visual Line'ı her şeyi doğru seçtiğinizden emin olmak için kullanırım) ve sonra bir bul ve değiştir uygularım.

V]] - Görsel Satır, paragrafın / fonksiyonun sonuna.

  • : - Görsel modda olduğunuz için bu :'<,'>
  • s/ - Bul
  • CTRL+ "- öğeyi son çek / sil (örnekteki çubuk)
  • / - ve Değiştir
  • CTRL+ .- son ekleme (örnekteki baz)

Kullanmanız gerektiğinden bu desenin kullanımı biraz zaman alır. Çoğu zaman sadece bul ve değiştir işlevini argüman da dahil olmak üzere tüm fonksiyona uygulamak istersiniz, ancak bu anti-paterni gerçekleştirmemenin güzel bir yoludur. doğru şekilde."


2

Daha farklı bir kombinasyona basmak sakıncası yoksa cw, bir kısayol tanımlayarak istediğinizi kolayca elde edebileceğinize inanıyorum. Yapabilecekleriniz aşağıdakileri yerleştirmektir

nmap <leader>a "1yiw:let @/=@1^Mciw

sizin de .vimrcdosyaya. Not ^M dönüş anahtarın bir yakalama ve değil karakter ^ve M. Ekleme modunda Ctrl+ Vve ardından tuşlarına basarak elde edersiniz Enter. Şimdi, bu tanımlandığında, tuşuna basmak <leader>aaynı işlemi gerçekleştirecektir cw, ancak şimdi (değişiklikten önce) kelimesi "son arama kaydınızda" (yani /kayıtta) olacaktır, bu yüzden ndeğişikliği yaptıktan ve geri döndükten sonra normal moda geçtiğinizde bir sonraki tekrarlamaya gidersiniz. Aynı şekilde, tuşuna basmak Nsizi önceki olaylara götürür.

Kısayol Elbette farklı bir kısayol seçebilirsiniz <leader>a, ancak bunun çok erişilebilir bir kısayol olduğunu görüyorum. Şahsen belirledik <leader>için ,sadece basına gerektirecek kadar ,izledi a, ama bir Amerikan klavye kullanmak yok çünkü bu benim yüzden yani, \(ben inanıyorum biraz uzakta gizli \varsayılan <leader>).

Açıklama Fikir gerçekten basit. İmlecin altındaki sözcüğü arama yazmacına aktarın /ve sonra yapın cw. Bu nmap <leader>a "/yciwyüzden amaçladığım şeydi, ama ne yazık ki arama kaydına çekilebileceğini düşünmüyorum, bu yüzden geçici çözüm imlecin altındaki kelimeyi 1kayıt defterine çekmek , ardından /kaydı buna eşit olarak ayarlamak ve sonra yapmaktır cw. Yani "1yiwkaydına imlecin altındaki iç kelimeyi verilirse parçasıdır 1. İç sözcükleri bilmiyorsanız, kontrol edebilirsiniz :help iw. Daha sonra, :let @/=@1bir yakalama ile kayıt Enteriçeriğini koyar . Bu noktada ve1/nNimlecin altındaki sözcüğün önceki ve sonraki tekrarlaması olarak çalışır ve imleç ciwaltındaki sözcük silinecek ve Vim ekleme moduna geçecek şekilde a yapılır.

kelimeye karşı iç kelimeye, sadece tüm imlecin ve imlecin noktasından değil , tüm kelimeyi imlecin altında istediğinizi varsaydığımı fark ettim . Bu yüzden her yer iwyerine kullandım w. Bu durumda değilse,

nmap <leader>a "1yw:let @/=@1^Mcw

yerine. İmleç sözcüğün ilk harfinin üzerindeyse, hiçbir fark yoktur.

feragat Eğer bir imleç stand kurarak örneğin harflerinden şeyler diğerlerinden farkı içeren bir şey üzerinde kullanmaya çalışırsanız Bu çözüm muhtemelen iyi sonuç vermez \veya değiştirerek iwtarafından iW, ib, isveya ipfalan (Seveceğini neden bilmiyorum gerçi bu özelliği tam cümlelerle birlikte istiyorum)

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.