เป็นไปได้ไหมที่จะนับจำนวนคำหรือรูปแบบที่ปรากฏในไฟล์? บางครั้งมีประโยชน์ในการค้นหาว่ามีการเรียกใช้ฟังก์ชันกี่ครั้ง ฯลฯ
เป็นไปได้ไหมที่จะนับจำนวนคำหรือรูปแบบที่ปรากฏในไฟล์? บางครั้งมีประโยชน์ในการค้นหาว่ามีการเรียกใช้ฟังก์ชันกี่ครั้ง ฯลฯ
คำตอบ:
คำตอบของ Quincy นั้นใช้ได้ แต่มีวิธีที่แน่นอนในการทำเช่นนี้ซึ่งไม่ต้องการแก้ไขบัฟเฟอร์:
:%s/pattern//ng
สิ่งนี้จะพิมพ์ข้อความเช่น3 matches on 2 lines
นี้และจะไม่มีการเปลี่ยนแปลงใด ๆ กับบัฟเฟอร์ของคุณ
n
ธงทำให้:substitute
คำสั่งพิมพ์จำนวนของการแข่งขันแทนการดำเนินการเปลี่ยนตัวจริง การg
ตั้งค่าสถานะช่วยให้การรายงานการแข่งขันหลายรายการต่อบรรทัด
อีกสิ่งที่อาจเป็นประโยชน์ต่อกรณีการใช้งานของคุณคือการพิมพ์ทุกบรรทัดที่ตรงกับรูปแบบ:
:global/pattern/print
ซึ่งสามารถย่อให้เป็น:
:g/pattern
นี่เป็นหนึ่งในการใช้งานที่ง่ายที่สุดของ:global
คำสั่ง (ซึ่งมีประสิทธิภาพเหลือเชื่อ) มันจะพิมพ์บรรทัดที่ตรงกันpattern
ทั้งหมดแล้ว (ถ้ามีมากกว่าหนึ่งบรรทัด) คุณกดEnter
หรือพิมพ์คำสั่งอื่นเพื่อให้หายไป
เรื่องไม่สำคัญ: คำสั่งนี้เป็นที่มาของชื่อgrep
ตามปกติจะอธิบายเป็นg/re/p
ที่re
หมายถึง "การแสดงออกปกติ"
g/re/p
เป็นจริงจากการไม่ได้ed
vi
Grep ถือกำเนิด vi โดยสองสามปี
nnoremap <leader>n :%s///gn<CR>
แผนที่ ดังนั้นฉันกด<leader>n
เพื่อนับการเกิดขึ้นของรูปแบบการค้นหาก่อนหน้านี้ ฉันใช้สิ่งนี้บ่อยครั้งอย่างแปลกใจ
:%s/pattern//n
การn
ตั้งค่าสถานะในที่สุดบอกให้:s
คำสั่งเพื่อรายงานจำนวนการแข่งขันและไม่ได้แทนที่จริง อ่าน:h :s_flags
รายละเอียดเพิ่มเติม
gn
เหรอ
g
เช่นกันหากคุณรู้สึกว่าอาจมีการแข่งขันมากกว่าหนึ่งรายการต่อบรรทัดซึ่งมักเป็นจริง สำหรับวัตถุประสงค์ของคำถามอย่างไรก็ตามธงn
มีความสำคัญมากกว่า
ก่อนอื่น/
ให้ใช้การค้นหา regex จากนั้น
:%s///gn
นี่เป็นคำตอบเดียวกับ Dhurva ยกเว้นว่าเป็น a.) ใช้งานได้ง่ายกว่า (เนื่องจากคุณสามารถดูตัวอย่างผลลัพธ์ของ regex ที่ตรงกันก่อน) และ b.) จับคู่กับg
ค่าสถานะทั่วโลกเพื่อนับเหตุการณ์ทั้งหมด
ต้องขอบคุณ PR https://github.com/vim/vim/pull/4317คำสั่งการค้นหาแต่ละคำสั่งจะแสดงสถิติการค้นหา (เช่นตำแหน่งการแข่งขันปัจจุบันและจำนวนการแข่งขัน) ในเวอร์ชั่น 8.1.1270 ตรวจสอบให้แน่ใจที่จะลบจากตัวแปรS
shortmess
:%s/pattern//g
คุณจะเห็นจำนวนการทดแทนในแถบสถานะ นั่นคือจำนวนครั้งที่pattern
ปรากฏ จากนั้นเพียงกดu
เพื่อเลิกทำการแทนที่
แผนที่ที่ฉันเพิ่มลงใน. vimrc ของฉันขึ้นอยู่กับคำตอบที่นี่:
" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>
" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>
คำอธิบายเล็กน้อยหวังว่าจะเป็นประโยชน์สำหรับ vimmers รุ่นใหม่:
<c-r><c-w>
แทรกคำใต้เคอร์เซอร์ในบรรทัดคำสั่งซึ่งมีประโยชน์หลายครั้ง
<c-u>
เป็นสิ่งจำเป็นที่จะเอาแทรกโดยอัตโนมัติ'<,'>
เมื่อมีการกด:
ในโหมดภาพและจะบรรทัดคำสั่ง
*
ทะเบียนมี (ที่ผ่านมา) เลือกภาพ<c-r>*
แทรกเนื้อหาของ*
การลงทะเบียนในบรรทัดคำสั่ง (นอกจากนี้ยังสามารถใช้ในโหมดแทรก)
:h count-items