ctags เปิดใช้งานคุณลักษณะสองอย่าง: ช่วยให้คุณสามารถข้ามจากการเรียกใช้ฟังก์ชันไปยังคำจำกัดความและการทำให้สมบูรณ์ได้ วิธีแรกหมายความว่าเมื่อคุณอยู่เหนือการเรียกใช้เมธอดการกดปุ่มg]
หรือCTRL-]
จะข้ามไปยังตำแหน่งที่กำหนดหรือใช้วิธีการนั้น คุณลักษณะที่สองหมายความว่าเมื่อคุณพิมพ์foo.
หรือfoo->
และถ้า foo เป็นโครงสร้างเมนูป๊อปอัปพร้อมการกรอกฟิลด์จะปรากฏขึ้น
cscope ยังมีคุณสมบัติแรก - โดยใช้set cscopetag
- แต่ไม่ใช่คุณสมบัติสุดท้าย อย่างไรก็ตามกล้องจุลทรรศน์ยังเพิ่มความสามารถในการข้ามไปยังสถานที่ใด ๆ ที่มีการเรียกใช้ฟังก์ชันด้วย
ตราบเท่าที่การกระโดดไปรอบ ๆ ฐานรหัสนั้นเกี่ยวข้อง ctags จะนำคุณไปสู่สถานที่ที่มีการนำฟังก์ชันไปใช้งานเท่านั้นในขณะที่ cscope สามารถแสดงให้คุณเห็นว่ามีการเรียกใช้ฟังก์ชันใดเช่นกัน
ทำไมคุณถึงเลือกอย่างใดอย่างหนึ่ง? ฉันใช้ทั้งสองอย่าง ctags นั้นง่ายต่อการตั้งค่าวิ่งเร็วขึ้นและหากคุณสนใจแค่การกระโดดเพียงวิธีเดียวมันจะแสดงเส้นน้อยลง คุณสามารถเรียกใช้:!ctags -R .
และใช้g]
งานได้ นอกจากนี้ยังช่วยให้ทุกสิ่งที่สมบูรณ์
Cscope เหมาะสำหรับฐานรหัสที่ใหญ่กว่าและไม่รู้จัก การตั้งค่าเป็นความเจ็บปวดเนื่องจาก cscope ต้องการไฟล์ที่มีรายชื่อไฟล์ที่จะแยกวิเคราะห์ นอกจากนี้ในกลุ่มโดยค่าเริ่มต้นจะไม่มีการตั้งค่าการผูกคีย์ - คุณต้องเรียกใช้:cscope blah blah
ด้วยตนเอง
เพื่อแก้ปัญหากำปั้นฉันมีสคริปต์ทุบตีcscope_gen.sh
ที่มีลักษณะดังนี้:
#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp' \
> cscope.files
# -b: just build
# -q: create inverted index
cscope -b -q
สิ่งนี้ค้นหารหัสที่ฉันสนใจสร้างรายการ cscope.files และสร้างฐานข้อมูล ด้วยวิธีนี้ฉันสามารถเรียกใช้ ":! cscope_gen.sh" แทนที่จะต้องจำขั้นตอนการตั้งค่าทั้งหมด
ฉันจับคู่การค้นหาด้วยกล้องจุลทรรศน์กับ ctrl-space x 2 ด้วยตัวอย่างข้อมูลนี้ซึ่งจะช่วยลดส่วนอื่น ๆ ของกล้องจุลทรรศน์:
nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>
มีปลั๊กอิน cscope_maps.vimที่ตั้งค่าการเชื่อมโยงที่คล้ายกัน ฉันจำไม่ได้ว่าตัวเลือกทั้งหมดหมายถึงอะไรจึงมักจะยึดติดกับ ctrl-space
ดังนั้นเพื่อสรุป: ctags นั้นง่ายต่อการตั้งค่าและส่วนใหญ่ใช้งานได้โดยไม่ต้องทำอะไรมากมายมันมีความสำคัญสำหรับ omni-complete ด้วย cscope ให้คุณสมบัติเพิ่มเติมหากคุณต้องรักษาฐานรหัสขนาดใหญ่และส่วนใหญ่ไม่รู้จัก แต่ต้องใช้ขาทำงานมากขึ้น
make tags
ในเคอร์เนลรูท dir และเล่นกับการกระโดดไปมาและเวลาส่วนใหญ่ลงเอยผิดที่ ฉันอ่านว่า ctags มีปัญหากับ c พรีโปรเซสเซอร์ แต่การพิจารณาว่า ctags ถูกใช้ใน lxr เห็นได้ชัดว่าต้องเป็นสิ่งที่สามารถทำได้