ในกลุ่ม:make
ทำให้ง่ายต่อการสร้างและแก้ไขข้อผิดพลาดและ:grep
และพฤติกรรมเช่น:vimgrep
:make
แต่ทำไมคุณถึงต้องการคำสั่งทั้งสองนี้? ทำไมไม่เพียงค้นหารูปแบบและเพียงกดn
? อะไรคือข้อดีของพวกเขามากกว่าเพียงแค่การค้นหา?
ในกลุ่ม:make
ทำให้ง่ายต่อการสร้างและแก้ไขข้อผิดพลาดและ:grep
และพฤติกรรมเช่น:vimgrep
:make
แต่ทำไมคุณถึงต้องการคำสั่งทั้งสองนี้? ทำไมไม่เพียงค้นหารูปแบบและเพียงกดn
? อะไรคือข้อดีของพวกเขามากกว่าเพียงแค่การค้นหา?
คำตอบ:
อย่างที่หมอพูดว่า:
Vim has two ways to find matches for a pattern: Internal and external.
สรุป:vimgrep
ใช้กลไก grep ของ Vim เพื่ออ่านและค้นหาในไฟล์ :grep
ใช้คำสั่งภายนอกเพื่อให้ได้งานเดียวกัน
การ/
ค้นหาสำหรับบัฟเฟอร์ปัจจุบันเท่านั้นในขณะที่:[vim]grep
ค้นหาผ่านรูปแบบของไฟล์ช่วยให้คุณสามารถค้นหาในโครงการทั้งหมดในครั้งเดียว
ดู:h grep
ข้อมูลเพิ่มเติมได้ที่
/?
ค้นหาเฉพาะบัฟเฟอร์ปัจจุบันเท่านั้น:grep
และ:vimgrep
ใช้ไฟล์ / patterns / globs ตามอำเภอใจเป็นอาร์กิวเมนต์
ประโยชน์ของการ:[vim]grep
มากกว่า/?
คือว่าผลที่ได้รับการใส่ลงไปในรายการ QuickFIX (หรือรายการสถานที่ถ้าคุณใช้:l[vim]grep
) :cl
นี้หมายถึงว่าคุณสามารถดึงรายชื่อของการแข่งขันทั้งหมดโดยใช้ จากนั้นคุณสามารถใช้ตัวเลขเพื่อไปยังผลลัพธ์ที่คุณต้องการจากรายการโดยตรง
นอกจากนี้ยังหมายความว่าคุณสามารถใช้คำสั่งเดียวกันเพื่อค้นหาบัฟเฟอร์ปัจจุบัน:[vim]grep pattern %
เพื่อค้นหาฐานรหัสทั้งหมดของคุณ:[vim]grep pattern path
เพื่อให้มีสมมาตรที่ดี
นอกจากนี้คุณสามารถแยกสาขาและใช้Silver Surfer / Ripgrepเพื่อให้การค้นหามีประสิทธิภาพมาก สิ่งเหล่านี้สามารถถูกแม็พกับ:[vim]grep
คำสั่ง
มี 3 ข้อได้เปรียบหลักที่ฉันเห็น
ใช้สอดคล้องregex
เครื่องยนต์ / ไวยากรณ์:การใช้:grep/vimgrep
ช่วยให้คุณสามารถกำหนดgrepprg
ซึ่งสามารถกำหนดgrep/ack/ag
ฯลฯ ใช้นี้คุณสามารถค้นหาบัฟเฟอร์ปัจจุบันหรือบัฟเฟอร์หลาย / ไฟล์โดยใช้สอดคล้องregex
เครื่องยนต์ ในทางกลับกันถ้าคุณใช้ตัวเลือกของกลุ่ม/pattern
คุณจะติดอยู่กับเอ็นจิ้น regex เริ่มต้นของกลุ่มซึ่งมีไวยากรณ์ที่แตกต่างเมื่อเทียบกับextended regular expression
ไวยากรณ์ ดังนั้นทุกครั้งที่คุณต้องค้นหานิพจน์คุณจะต้องคิด / จำไว้ว่าคุณควรใช้\)
หรือเพียงแค่)
และความแตกต่างอื่น ๆ สิ่งนี้อาจน่ารำคาญมาก ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )
vimgrep จะใส่รายการคำสั่ง / ตำแหน่งที่ตั้ง : ใช้:grep/vimgrep
ช่วยให้คุณสามารถเติมรายการค้นหา ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d )
หากคุณต้องการใช้รายการตำแหน่งคุณสามารถใช้]q
ทางลัดเพื่อนำทางหากคุณมีปลั๊กอินที่ไม่มีการควบคุมของ Tim-Popes ( https://github.com/tpope/vim-unimpaired )
การค้นหาที่ซับซ้อนขณะที่อยู่ในกลุ่ม : โดยทั่วไปหากคุณต้องทำการค้นหาที่ซับซ้อนคุณอาจต้องใช้บรรทัดคำสั่ง อย่างไรก็ตามหากคุณกำหนดgreprg
อย่างเหมาะสมและใช้คำสั่งเช่น [1]
: vim / pattern1 / find . -type f
คุณสามารถค้นหาความซับซ้อนมากและแสดงผลการค้นหาในของคุณหรือlocation list
quickfix list
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/