Menghitung kejadian di Vim tanpa menandai buffer berubah

111

Untuk mengetahui berapa kali pola ada di buffer saat ini, saya lakukan:

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

Ini memberikan jumlah kemunculan pola, tetapi jelas rumit dan juga memiliki efek samping pengaturan status 'berubah'.

Adakah cara yang lebih elegan untuk menghitung?

Paul Oyster
sumber

Jawaban:

166

Untuk menghindari substitusi, biarkan pola kedua kosong, dan tambahkan tanda “n”:

:%s/pattern-here//gn

Ini digambarkan sebagai tip resmi .

Bruno De Fraine
sumber
8
bahkan lebih rumit, tetapi setidaknya sekarang sudah resmi bahwa tidak ada cara yang elegan ...
Paul Oyster
53
Jika Anda telah melakukan penelusuran menggunakan /, hasilnya hanya:% s /// gn
Peter Gibson
Jadi tambahkan saja ke .vimrc Anda
JESii
3
Saya menemukan pemetaan berikut yang cukup berguna: nnoremap <leader>n :%s///gn <CR>untuk menghitung kemunculan pencarian terakhir
Ikar Pohorský
1
Tidak ada cara untuk membuat hitungan ini menjadi variabel kan? Itulah yang saya butuhkan ...
Steven Lu
8
:help count-items

Di VIM 6.3, inilah cara Anda melakukannya.

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

Di VIM 7.2, berikut cara melakukannya:

:%s/your_word/&/gn   # returns the count, n flag avoids substitution
konyak
sumber
Saya memiliki file besar dan mengikuti pendekatan ini jauh lebih cepat daripada grep.
Jai Prakash
5
:!cat %| grep -c "pattern"

Ini bukan perintah vim, tetapi ini akan memberi Anda apa yang Anda butuhkan dari vim.
Anda dapat memetakannya ke perintah jika Anda perlu sering menggunakannya.

Ilya
sumber
7
Lebih sederhananya:!grep -c "pattern" %
Iazel
2

IndexedSearch vimscript meningkatkan perintah pencarian Vim untuk menampilkan "Pada pertandingan #N dari M pertandingan".

disunting
sumber
1

Letakkan kursor pada kata yang ingin Anda hitung dan jalankan perintah berikut.

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

Lihat :h c_ctrl-r_ctrl-w

Sagar Jain
sumber
-1

vimgrep adalah temanmu di sini:

vimgrep pattern %

Acara:

(1 of 37)
rdeits
sumber
7
Ini tidak menghitung kemunculan, tetapi menghitung garis yang mengandung pola. Jadi jika pola muncul dua kali dalam satu baris, itu hanya akan dihitung sekali.
sotto