Yanıtlar:
Quincy'nin cevabı gayet iyi, ancak bunu yapmanın kesin bir yolu var; bu da tamponu düzenlemeyi gerektirmiyor:
:%s/pattern//ng
Bu, gibi bir ileti yazdırır 3 matches on 2 lines
ve arabellekte hiçbir değişiklik yapılmayacak.
n
Bayrak yapan :substitute
komut gerçek bir ikame yapmak yerine eşleşme sayısını yazdırmak; g
bayrak her satırda birden maçların raporlamasını sağlar.
Kullanım durumunuz için faydalı olabilecek başka bir şey, bir desene uyan tüm satırları yazdırmaktır:
:global/pattern/print
Bu kısaltılabilir:
:g/pattern
Bu, :global
komutun en basit kullanımlarından biridir (ki dikkat çekici derecede güçlüdür). Sadece eşleşen tüm satırları yazdıracak pattern
ve sonra (birden fazla satır varsa) Enter
uzaklaşmak için başka bir komutu basacak veya yazacaksınız.
Biraz önemsiz: Bu komut, grep
genellikle "normal ifade" anlamına g/re/p
geldiği şekilde tanımlandığı gibi adın kökenidir re
.
g/re/p
aslında ed
değil, değil vi
. Grep, birkaç yıl önce vi'yi öldürür.
nnoremap <leader>n :%s///gn<CR>
eşleme. Bu yüzden <leader>n
daha önce aranan desenin oluşumunu saymak için basın . Bunu şaşırtıcı derecede sık kullanıyorum.
:%s/pattern//n
Sondaki n
bayrak, :s
komuta, eşleşmelerin sayısını bildirir ve gerçekte yerine geçenleri bildirir . :h :s_flags
Daha fazla bilgi için okuyun .
gn
?
g
her satıra birden fazla eşleşme olabileceğini düşünüyorsanız, bu genellikle doğrudur. Ancak sorunun amacı için bayrak n
daha önemlidir.
Önce /
bir regex aramak, sonra
:%s///gn
Bu, Dhurva'nın cevabı ile aynıdır, ancak a.) Kullanımı daha kolaydır (regex'in önce ne eşleştiğinin sonuçlarını önizleyebildiğiniz için) ve b.) Tüm oluşumları g
saymak için genel olarak bayrakla eşleşir .
Bu PR https://github.com/vim/vim/pull/4317 sayesinde , her arama komutu vim 8.1.1270’de arama istatistiklerini (mevcut maç konumu ve maç sayısı gibi) gösterir. S
Değişkenden kaldırdığınızdan emin olun shortmess
.
:%s/pattern//g
Durum çubuğunda değişiklik sayısını göreceksiniz. Bu kaç kez pattern
belirir. Sonra u
değiştirmeleri geri almak için sadece basın .
Buradaki cevaplara dayanarak .vimrc'ime eklediğim bir eşleme:
" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>
" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>
Biraz daha açıklama, umarım yeni vimmers için faydalıdır:
<c-r><c-w>
sözcüğü imlecin altına komut satırında ekler, birçok durumda kullanışlıdır.
<c-u>
Otomatik olarak eklenir kaldırmak için gereklidir '<,'>
basıldığında :
görsel modunda ve komut satırına giderek.
*
Yazmacı (son) görsel seçimi içeren <c-r>*
içeriklerini ekler *
(aynı zamanda ekleme modunda kullanılabilir) komut doğrultusunda kayıt.
:h count-items