Bazen :sdoğru olabilecek veya olmayabilecek karmaşık bir normal ifade ile veya tüm eşleşmeleri değiştirmek isteyip istemediğimden emin değilim .
Vim'e, metnin yerini almadan önce bulduğu her eşleşmeyi onaylamasını söyleyebilmemin bir yolu var mı?
Bazen :sdoğru olabilecek veya olmayabilecek karmaşık bir normal ifade ile veya tüm eşleşmeleri değiştirmek isteyip istemediğimden emin değilim .
Vim'e, metnin yerini almadan önce bulduğu her eşleşmeyi onaylamasını söyleyebilmemin bir yolu var mı?
Yanıtlar:
Evet! İçin cişaretini kullanın :substitute. Gönderen :help substitute:
[c] Confirm each substitution. Vim highlights the matching string (with
hl-IncSearch). You can type: :s_c
'y' to substitute this match
'l' to substitute this match and then quit ("last")
'n' to skip this match
<Esc> to quit substituting
'a' to substitute this and all remaining matches {not in Vi}
'q' to quit substituting {not in Vi}
CTRL-E to scroll the screen up {not in Vi, not available when
compiled without the +insert_expand feature}
CTRL-Y to scroll the screen down {not in Vi, not available when
compiled without the +insert_expand feature}
Örnek kullanım pasta gibi basit:
%s/old/new/c
Bu çok faydalı, ancak 2 hafta öncesine kadar bunu bilmiyordum :-) Ve hatta 'vi :-)' da bile mevcut
Bonus ipucu: Ayrıca kullanmak isteyebilirsiniz :set nowrapscan; bu, Vim'in dibe vurduğunda üste sarılmasını önler. Bayrağı kullanırken özellikle yararlı buldum c.
Carpetsmoker'in söylediklerine ek olarak:
&incsearch( set incsearchVim) ayarı gerçekten yararlıdır. Yararlı ve az bilinen bir numara ile birlikte kullanabilirsiniz.
İşin püf noktası sadece /veya ?komutunu kullanarak karmaşık normal ifadenizi denemektir . Vim, &incsearcheşleşmeleri etkileşimli olarak göstermek için ayarı kullanacaktır . Normal ifadeden memnun olduğunuzda, vim'in :%s//replacementönceki aramayı kullanmasını sağlamak için kullanabilirsiniz.
İçindeki parçanın //boş olduğuna dikkat edin (metni aramaya koyduğunuz yer budur). Boş bırakırsanız, Vim'e önceki arama normal ifadesini kullanmasını söylersiniz. Bununla, karmaşık bir regex yazabilir /ve tüm avantajlarından yararlanabilir set incsearchve daha sonra %s//replacementaramayı yürütmek ve değiştirmek için komutu kullanabilirsiniz .
:sKomutlar için incsearch'e benzer bir şey istiyorsanız , vim- over'e bakın , ancak sadece yerel Vim yolunu kullanmayı tercih ediyorum.
Benim favori etkileşimli ikame etmektir arama kullanarak /ve kullanmadan maçları geçmesi n.
Ardından metni istediğimle değiştirmek için ve tuşlarını kullanarak eşleştir'i seçin .gns
Ve bir sonraki maça geçip tuşuna basarak tekrarlayın ..
:s/old/new/gc).
Neovim'de 'inccommand', :skomutun sonucunu yazarken önizlemenizi sağlayan seçenek de vardır .
Herkesin yararına incsearch, deseni yazarken önizlemeyi göstermek için vim8'de güncellendi
:%s/pattern/replace/tuşuna basın ve sonra tuşuna basınu,hlsearchetkinleştirdiyseniz Vim'in değiştirdiği parçaları görebilirsiniz . Ve bu metni tekrar ile değiştirebilirsiniz^R.