Bazen :s
doğ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 :s
doğ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 c
iş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 incsearch
Vim) 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, &incsearch
eş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 incsearch
ve daha sonra %s//replacement
aramayı yürütmek ve değiştirmek için komutu kullanabilirsiniz .
:s
Komutlar 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'
, :s
komutun 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
,hlsearch
etkinleştirdiyseniz Vim'in değiştirdiği parçaları görebilirsiniz . Ve bu metni tekrar ile değiştirebilirsiniz^R
.