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?

Jawaban:


166

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

:%s/pattern-here//gn

Ini digambarkan sebagai tip resmi .


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

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.


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


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


-1

vimgrep adalah temanmu di sini:

vimgrep pattern %

Acara:

(1 of 37)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.