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 linesve arabellekte hiçbir değişiklik yapılmayacak.
nBayrak yapan :substitutekomut gerçek bir ikame yapmak yerine eşleşme sayısını yazdırmak; gbayrak 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, :globalkomutun en basit kullanımlarından biridir (ki dikkat çekici derecede güçlüdür). Sadece eşleşen tüm satırları yazdıracak patternve sonra (birden fazla satır varsa) Enteruzaklaşmak için başka bir komutu basacak veya yazacaksınız.
Biraz önemsiz: Bu komut, grepgenellikle "normal ifade" anlamına g/re/pgeldiği şekilde tanımlandığı gibi adın kökenidir re.
g/re/paslında eddeğ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>ndaha önce aranan desenin oluşumunu saymak için basın . Bunu şaşırtıcı derecede sık kullanıyorum.
:%s/pattern//nSondaki nbayrak, :skomuta, eşleşmelerin sayısını bildirir ve gerçekte yerine geçenleri bildirir . :h :s_flagsDaha fazla bilgi için okuyun .
gn?
gher satıra birden fazla eşleşme olabileceğini düşünüyorsanız, bu genellikle doğrudur. Ancak sorunun amacı için bayrak ndaha ö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ı gsaymak 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. SDeğ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 patternbelirir. Sonra udeğ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