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.