Vurgulanan bir dizeyi seçici olarak nasıl değiştirebilirim?


11

Arayarak değiştirmek istediğim dizeyi vurguladım. Şimdi sadece vurgulanan metni değiştirmek istiyorum. nArama dizesinin sonraki örneğine ilerlemek için kullanıyorum . Böyle bir şey yapabileceğimi düşünüyordum ciwama bu sadece vurgulanan metni değil tüm kelimeyi değiştiriyordu.

Bildiğim :%s/old/new/gkadarıyla tüm örnekleri değiştirmek istemiyorum. Bunun yerine, imlecimi her örneğe ilerletmek ve sonra değiştirip değiştirmemeye karar vermek istiyorum.

Yanıtlar:


16

gnGeçerli arama eşleşmesini düzenlemek için hareketi kullanın . Aşağıdaki örnek, geçerli eşleşmeyi "FooBar" olarak değiştirecektir:

cgnFooBar

Bu tekniğin en önemli yanı, değişikliği tekrarlayabilmenizdir .. Bir sonraki maçın .tekrarlamak için kullanabileceğiniz şekilde değişeceğini varsayarsak . Veya üzerinden birkaç eşleşmeyi atlayın nve kullanın ..

Vimcasts'ın bu konuda güzel bir bölümü var: gn kullanarak arama eşleşmelerinde çalışma

Daha fazla yardım için bkz:

:h gn

Bu, farklı yerlerde kullanmanız gereken farklı yedek dizeleriniz olduğunda kesinlikle gitmenin yoludur. Göründüğü gibi görsel modun nüanslarından emin değilim gn, bu yüzden keşfettiğim benzer bir yöntem:c//e<CR>FooBar<Esc>//<CR>
Jeff

Tüm seçimleri / eşleşmeleri aynı anda değiştirmenin bir yolu var mı? Temel olarak, refactor?
Geremia

@Geremia, evet, :%s/oldtext/newstuff/gtüm maçları değişecek oldtextiçin newstuff.
zundarz

@zundarz Normal ifade yapmak istemiyorum, sadece değişken adlarını değiştirmek istiyorum. .Birden çok kez vurmak yerine :%norm .( source ) kullanabilirim .
Geremia

7

/wordVeya ile zaten bir kelime aradıysanız ?word.

Arama terimini ( ) boş bırakarak, :%s//newword/gcönceden aradığınız kelimeyi değiştirmek için kullanabilirsiniz .newwords//..

cBayrak her değişiklik basarak, teyit edilmesi gerektiğini söylüyor yevet veya nhayır için.

:help :s_flagsOnaylama bayrağı hakkında daha fazla bilgi için göz atın .


1
Ben yardım bakmak söyledi biliyorum, ama siz de açıkça Eğer basın da yapabilirsiniz bahsedebilirim l, ave q(veya <Esc>onay döngüsünü tamamlamayı çeşitli yollar için).
Jeff

2

Yöntem 1

İstediğinizi gerçekleştirmek için gnve gNeşlemelerinden yararlanabilirsiniz. gnson kullanılan arama terimini arar ve görsel olarak eşleşmeyi seçer. gNgeriye doğru arama yapması dışında tamamen aynı şeyi yapar. Gibi bir işleçle birleştirildiğinde c, işleç eşleşmeye uygulanır; Örneğin, son arama dizeniz "foo" ise ve yazarsanız cgn, bir sonraki "foo" örneğini arar, siler ve yeni metni girmek için ekleme moduna geçirin.

Bunlar hakkında daha fazla bilgi için bkz. :help gnVe :help gN.

Yöntem # 2

:substituteKomutu cbayrakla birlikte kullanabilirsiniz . Bu sizden her bir değişikliği onaylamanızı isteyecektir. Örneğin, foo'nun tamamını dosyadaki çubukla değiştirmek istediğinizi, ancak her bir değişikliği onaylamak istediğinizi varsayalım:

:%s/foo/bar/gc

Bu konuda daha fazla için, bu yardım konularına bakın: :help :s_flags, :help cmdline-ranges, ve :help :substitute.

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.