เป็นไปได้ไหมที่จะนับจำนวนคำหรือรูปแบบที่ปรากฏในไฟล์? บางครั้งมีประโยชน์ในการค้นหาว่ามีการเรียกใช้ฟังก์ชันกี่ครั้ง ฯลฯ
เป็นไปได้ไหมที่จะนับจำนวนคำหรือรูปแบบที่ปรากฏในไฟล์? บางครั้งมีประโยชน์ในการค้นหาว่ามีการเรียกใช้ฟังก์ชันกี่ครั้ง ฯลฯ
คำตอบ:
คำตอบของ 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 viGrep ถือกำเนิด 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 ตรวจสอบให้แน่ใจที่จะลบจากตัวแปรSshortmess
:%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