การนับจำนวนครั้งที่เกิดขึ้นในกลุ่มโดยไม่ทำเครื่องหมายบัฟเฟอร์เปลี่ยนแปลง


111

เพื่อให้ทราบว่ามีรูปแบบอยู่ในบัฟเฟอร์ปัจจุบันกี่ครั้งฉันจึง:

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

ให้จำนวนครั้งของรูปแบบ แต่เห็นได้ชัดว่ายุ่งยากและยังมีผลข้างเคียงจากการตั้งค่าสถานะ 'เปลี่ยนแปลง'

มีวิธีที่สวยหรูกว่าในการนับหรือไม่?

คำตอบ:


166

เพื่อหลีกเลี่ยงการแทนที่ให้ปล่อยรูปแบบที่สองว่างไว้และเพิ่มแฟล็ก“ n”:

:%s/pattern-here//gn

นี้จะอธิบายว่าเป็นเคล็ดลับอย่างเป็นทางการ


8
ยิ่งยุ่งยาก แต่อย่างน้อยตอนนี้ก็เป็นทางการแล้วว่าไม่มีทางสวยหรู ...
Paul Oyster

53
หากคุณทำการค้นหาโดยใช้ / แล้วมันจะกลายเป็น:% s /// gn
Peter Gibson

เพียงเพิ่มลงใน. vimrc ของคุณ
JESii

3
ฉันพบว่าการทำแผนที่ต่อไปนี้มีประโยชน์มาก: nnoremap <leader>n :%s///gn <CR>เพื่อนับจำนวนการค้นหาครั้งล่าสุด
Ikar Pohorský

1
ไม่มีทางที่จะทำให้การนับนี้เป็นตัวแปรใช่ไหม? นั่นคือสิ่งที่ฉันต้องการ ...
Steven Lu

8
:help count-items

ใน VIM 6.3 นี่คือวิธีที่คุณทำ

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

ใน VIM 7.2 นี่คือวิธีที่คุณจะทำ:

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

ฉันมีไฟล์ขนาดใหญ่และการทำตามวิธีนี้เร็วกว่า grep มาก
Jai Prakash

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

ไม่ใช่คำสั่ง vim แต่จะให้สิ่งที่คุณต้องการจาก vim
คุณสามารถแมปกับคำสั่งได้หากจำเป็นต้องใช้บ่อยๆ


7
ง่ายกว่านั้น:!grep -c "pattern" %
Iazel



-1

vimgrep เป็นเพื่อนของคุณที่นี่:

vimgrep pattern %

แสดงให้เห็นว่า:

(1 of 37)

7
นี่ไม่นับการเกิดขึ้น แต่จะนับเส้นที่มีรูปแบบ ดังนั้นหากรูปแบบเกิดขึ้นสองครั้งติดต่อกันระบบจะนับเพียงครั้งเดียว
sotto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.