Arabelleği değiştirilmiş olarak işaretlemeden Vim'deki olayları sayma


111

Geçerli arabellekte bir modelin kaç kez olduğunu bilmek için şunları yaparım:

:%s/pattern-here/pattern-here/g

Modelin görülme sayısını verir, ancak açıkça zahmetlidir ve ayrıca 'değiştirilmiş' durumunu ayarlama yan etkisine sahiptir.

Saymanın daha zarif bir yolu var mı?

Yanıtlar:


166

Değiştirmeyi önlemek için ikinci kalıbı boş bırakın ve "n" bayrağını ekleyin:

:%s/pattern-here//gn

Bu resmi bir ipucu olarak tanımlanmaktadır .


8
daha da hantal, ama en azından artık zarif bir yol olmadığı resmileşti ...
Paul Oyster

53
/ Kullanarak zaten bir arama yaptıysanız, sadece şu olur:% s /// gn
Peter Gibson

Bu yüzden onu .vimrc
dosyanıza

3
Haritalamayı takiben oldukça yararlı buldum: nnoremap <leader>n :%s///gn <CR>son aramanın oluşumlarını saymak için
Ikar Pohorský

1
Bu sayımı bir değişkene sokmanın bir yolu yok değil mi? İhtiyacım olan şey bu ...
Steven Lu 21

8
:help count-items

VIM 6.3'te bunu nasıl yapacağınız aşağıda açıklanmıştır.

:set report=0
:%s/your_word/&/g    # returns the count without substitution

VIM 7.2'de bunu şu şekilde yaparsınız:

:%s/your_word/&/gn   # returns the count, n flag avoids substitution

Büyük bir dosyam vardı ve bu yaklaşımı uygulamak grep'ten çok daha hızlıydı.
Jai Prakash

5
:!cat %| grep -c "pattern"

Bu tam olarak vim komutu değildir, ancak size vim'den ihtiyacınız olanı verecektir.
Sık kullanmanız gerekiyorsa komuta eşleyebilirsiniz.


7
Daha basit:!grep -c "pattern" %
Iazel


1

İmleci saymak istediğiniz kelimenin üzerine getirin ve aşağıdakileri yürütün.

:%s/<c-r><c-w>//gn

Görmek :h c_ctrl-r_ctrl-w


-1

vimgrep burada arkadaşınız:

vimgrep pattern %

Gösteriler:

(1 of 37)

7
Bu, oluşumları saymaz, ancak deseni içeren satırları sayar. Dolayısıyla, desen bir satırda iki kez meydana gelirse, yalnızca bir kez sayılır.
sotto
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.