แท็กสำหรับ Emacs: ความสัมพันธ์ระหว่าง etags, ebrowse, cscope, GNU Global และ ctags ที่อุดมสมบูรณ์


102

ฉันทำงานกับโปรเจ็กต์ C ++ และฉันได้อ่านคำแนะนำของ Alex Ott เกี่ยวกับ CEDETและเธรดอื่น ๆ เกี่ยวกับแท็กใน StackOverflow แต่ฉันยังคงสับสนเกี่ยวกับวิธีที่ Emacs เชื่อมต่อกับระบบแท็กต่าง ๆ เหล่านี้เพื่ออำนวยความสะดวกในการเติมข้อความอัตโนมัติการค้นหาคำจำกัดความการนำทางของแหล่งที่มา ฐานรหัสหรือการแสดงตัวอย่างของ doc-strings

  1. ความแตกต่าง (เช่นในแง่ของคุณสมบัติ) ระหว่างคืออะไร etags, ebrowse, exuberant ctags, cscope, GNU GlobalและGTags? ฉันจะทำอะไรต้องทำเพื่อใช้พวกเขาในEmacs ?

  2. ฉันต้องการความหมาย / วุฒิสมาชิก (CEDET) หรือไม่หากต้องการใช้แท็กเพื่อนำทาง / สัญลักษณ์เติมข้อความอัตโนมัติ

  3. ความหมายนำอะไรมาสู่ตารางด้านบนของยูทิลิตี้แท็กต่างๆเหล่านี้ มันเชื่อมต่อกับเครื่องมือเหล่านี้อย่างไร?


2
ตัดสินโดยลำต้นที่GTagsโครงการที่คุณเชื่อมโยงไปยังค่อนข้างตาย ถ้ามีคนพูดถึงgtagsอาจหมายถึง GNU Global
Gordon Gustafson

เพิ่มUniversal Ctags - ทางแยกที่คงไว้ของ Exuberant Ctags - ลงในส่วนผสม :) ggtagsคือแพ็คเกจ Emacs สำหรับสิ่งนี้
legends2k

คำตอบ:


71

นั่นเป็นคำถามที่ดีที่ฉันได้อ่านเมื่อเร็ว ๆ นี้ดังนั้นฉันจะพยายามอธิบายความแตกต่างโดยละเอียด:

จุดที่ 1:

etagsและctagsทั้งสองสร้างไฟล์ดัชนี (aka tag / TAGS) ของออบเจ็กต์ภาษาที่พบในไฟล์ต้นฉบับซึ่งช่วยให้รายการเหล่านี้สามารถค้นหาได้อย่างรวดเร็วและง่ายดายโดยโปรแกรมแก้ไขข้อความหรือยูทิลิตี้อื่น ๆ แท็กหมายถึงออบเจ็กต์ภาษาที่มีรายการดัชนี (หรืออีกทางหนึ่งคือรายการดัชนีที่สร้างขึ้นสำหรับออบเจ็กต์นั้น) แท็กที่สร้างโดย ctags มีความสมบูรณ์มากกว่าในแง่ของข้อมูลเมตา แต่ Emacs ไม่สามารถตีความข้อมูลเพิ่มเติมได้ดังนั้นคุณควรพิจารณาว่าแท็กเหล่านี้เหมือนกันมากหรือน้อย (ข้อได้เปรียบหลักคือctagsการรองรับภาษาอื่น ๆ ) การใช้งานหลักสำหรับไฟล์แท็กคือการค้นหาการประกาศคลาส / method / function / constant / etc / definition

cscopeเป็นสัตว์ร้ายที่ทรงพลังกว่ามาก (อย่างน้อยก็เท่าที่เกี่ยวข้องกับ C / C ++ และ Java) แม้ว่าจะทำงานบนหลักการเดียวกันมากหรือน้อย (การสร้างไฟล์ข้อมูลเมตาที่มีประโยชน์) แต่ก็ช่วยให้คุณทำสิ่งที่น่าสนใจยิ่งขึ้นเช่นค้นหาการอ้างอิงถึงสัญลักษณ์ทั้งหมดดูตำแหน่งที่เรียกใช้ฟังก์ชัน ฯลฯ (คุณสามารถค้นหาคำจำกัดความได้เช่นกัน) .

สรุปได้:

ctagsหนึ่งช่วยให้คุณนำทางไปยังการประกาศสัญลักษณ์ / คำจำกัดความ (สิ่งที่บางคนเรียกว่าการค้นหาทางเดียว ) ctagsเป็นเครื่องมืออเนกประสงค์ที่มีประโยชน์สำหรับหลายภาษา

ในทางกลับกัน (ตามที่กล่าวไว้ในหน้าโครงการ) cscopeช่วยให้คุณสามารถ:

  • ไปที่การประกาศสัญลักษณ์
  • แสดงรายการที่เลือกได้ของการอ้างอิงถึงสัญลักษณ์ทั้งหมด
  • ค้นหาคำจำกัดความสากลใด ๆ
  • ฟังก์ชันที่เรียกโดยฟังก์ชัน
  • ฟังก์ชันที่เรียกใช้ฟังก์ชัน
  • ค้นหาสตริงข้อความ
  • ค้นหารูปแบบนิพจน์ทั่วไป
  • ค้นหาไฟล์
  • ค้นหาไฟล์ทั้งหมดรวมทั้งไฟล์

มันจะมาเป็นแปลกใจให้กับทุกคนที่จุดนี้ว่าเมื่อผมจัดการกับ C / C ++ โครงการฉันจะทำให้การใช้งานหนักของและดูแลเกี่ยวกับน้อยมากcscope ctagsเมื่อจัดการกับภาษาอื่นสถานการณ์จะพลิกกลับอย่างเห็นได้ชัด

จุดที่ 2.

เพื่อให้มีการเติมข้อความอัตโนมัติอย่างชาญฉลาดคุณต้องมีตัวแยกวิเคราะห์ซอร์สโค้ดที่แท้จริง(เช่นความหมาย) มิฉะนั้นคุณจะไม่ทราบประเภทของวัตถุ (เช่น) ในแอปพลิเคชันของคุณและวิธีการที่สามารถเรียกใช้งานได้ คุณสามารถมีการเติมข้อความอัตโนมัติโดยอิงจากแหล่งที่มาต่างๆมากมาย แต่เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดคุณจะต้องมีตัวแยกวิเคราะห์ เช่นเดียวกันกับการเน้นไวยากรณ์ - ขณะนี้การเน้นไวยากรณ์ในโหมดหลักของ Emacs นั้นขึ้นอยู่กับนิพจน์ทั่วไปซึ่งมีความเปราะบางและเกิดข้อผิดพลาดได้ง่าย หวังว่าด้วยการรวมความหมายไว้ใน Emacs 23.2 (เคยเป็นแพ็คเกจภายนอกมาก่อน) เราจะเริ่มเห็นการใช้งานมากขึ้น (เช่นการใช้เพื่อวิเคราะห์ซอร์สโค้ดบัฟเฟอร์เพื่อเน้นอย่างถูกต้อง)

เนื่องจาก Emacs 24.1 semantic สามารถใช้งานได้จากเฟรมเวิร์กการทำให้เสร็จสมบูรณ์ของ Emacs วิธีที่ง่ายที่สุดในการทดสอบคือการเปิดไฟล์ซอร์สโค้ด C แล้วพิมพ์M-TABหรือC-M-iและดูความหมายโดยอัตโนมัติสำหรับคุณ สำหรับภาษาที่ไม่ได้เปิดใช้งานความหมายโดยค่าเริ่มต้นคุณสามารถเพิ่มบรรทัดต่อไปนี้ลงใน hook โหมดหลักที่คุณเลือกได้:

(add-to-list 'completion-at-point-functions 'semantic-completion-at-point-function)

จุดที่ 3.

ความหมายทำให้เกิดการรับรู้รหัสที่แท้จริง (สำหรับบางภาษาที่รองรับในปัจจุบัน) และปิดช่องว่างระหว่าง IDE และ Emacs มันไม่ได้เชื่อมต่อกับเครื่องมือเช่นetagsและcscopeแต่ก็ไม่ได้หมายความว่าคุณไม่สามารถใช้ร่วมกันได้

หวังว่าคำอธิบายของฉันมีเหตุผลและจะเป็นประโยชน์กับคุณ

ป.ล. ฉันไม่ค่อยคุ้นเคยglobalและebrowseแต่ถ้าหน่วยความจำให้บริการฉันพวกเขาใช้ etags


1
นี่มันเยี่ยมมาก ขอบคุณ! คุณรู้ไหมว่าฉันจะใช้cscopeใน Emacs ได้อย่างไร? ฉันอ่านเกี่ยวกับxcscope.elEmacsWiki ที่นี่แต่ฉันไม่พบลิงก์ไปยังไฟล์ นอกจากนี้.elคุณใช้ไฟล์ใดในการรับcscopeกับ Emacs
Amelio Vazquez-Reina

1
xcscope.elอยู่ในcscope/contrib/xcscope/(สิ่งนี้อยู่ในแพ็คเกจการแจกจ่าย) นั่นคือสิ่งที่ฉันใช้
Bozhidar Batsov

อีกหนึ่งคำถาม: semanticเปรียบเทียบกับcscope? ในแง่ของการนำทางผ่านซอร์สโค้ดความหมายมีฟังก์ชันการทำงานที่cscopeไม่มีหรือไม่? คุณใช้ทั้งสองอย่างหรือไม่?
Amelio Vazquez-Reina

4
ฉันไม่เชื่อว่า GNU Global ใช้ etags btw IIRC จะรักษาและค้นหาฐานข้อมูลที่ 'เหมาะสม' (แทนที่จะสแกนไฟล์ข้อความแบบแบน) ซึ่งมีประโยชน์ด้านประสิทธิภาพมากมายทั้งสำหรับการสืบค้นและ (โดยเฉพาะ) สำหรับการอัปเดตแท็ก
Phils

@BozhidarBatsov เมื่อคุณพูดFor languages where semantic is not enabled by default, you can add the following line to your major mode hook of choice ... <code>. ข้อมูลโค้ดนั้นทำอะไรได้บ้าง?
Amelio Vazquez-Reina

45

ฉันจะพยายามเพิ่มคำอธิบายใน 1

มันคืออะไร?

  • Etags เป็นคำสั่งในการสร้างไฟล์ 'TAGS' ซึ่งเป็นไฟล์แท็กสำหรับ Emacs คุณสามารถใช้ไฟล์กับ etags.el ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ emacs
  • Ctags เป็นคำสั่งในการสร้างไฟล์ 'tags' ซึ่งเป็นไฟล์แท็กสำหรับ vi Universal Ctags ซึ่งเป็นตัวต่อของ Exuberant Ctags สามารถสร้างไฟล์ 'TAGS' โดยใช้ตัวเลือก -e ซึ่งรองรับภาษาโปรแกรมมากกว่า 41 ภาษา
  • Cscope เป็นเครื่องมือเรียกดูซอร์สโค้ดแบบ all-in-one สำหรับภาษา C มี CUI ที่ดีของตัวเอง (ส่วนต่อประสานผู้ใช้อักขระ) และฐานข้อมูลแท็ก (cscope.in.out, cscope.out, cscope.po.out) คุณสามารถใช้ cscope จาก Emacs โดยใช้ xcscope.el ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ cscope
  • GNU GLOBAL เป็นระบบการติดแท็กซอร์สโค้ด แม้ว่าจะคล้ายกับเครื่องมือข้างต้น แต่ก็แตกต่างจากเครื่องมือเหล่านี้ตรงที่มันขึ้นอยู่กับตัวแก้ไขใด ๆ และไม่มีส่วนต่อประสานผู้ใช้ยกเว้นบรรทัดคำสั่ง Gtags เป็นคำสั่งในการสร้างไฟล์แท็กสำหรับ GLOBAL (GTAGS, GRTAGS, GPATH) คุณสามารถใช้ GLOBAL จาก emacs โดยใช้ gtags.el ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ GLOBAL นอกจากนี้ยังมีไลบรารี elisp อีกมากมายสำหรับมัน (xgtags.el, ggtags.el, anything-gtags.el, helm-gtags.el ฯลฯ )

การเปรียบเทียบ

  • Ctags และ etags ใช้เฉพาะคำจำกัดความ Cscope และ GNU GLOBAL ไม่เพียง แต่ปฏิบัติต่อคำจำกัดความเท่านั้น แต่ยังรวมถึงการอ้างอิงด้วย
  • Ctags และ etags ใช้ไฟล์แท็กข้อความแบบแบน Cscope และ GNU GLOBAL ใช้ฐานข้อมูลคีย์ - ค่าแท็ก
  • Cscope และ GNU GLOBAL มี grep เช่นเครื่องมือค้นหาและสิ่งอำนวยความสะดวกในการอัปเดตที่เพิ่มขึ้นของไฟล์แท็ก

การรวมกัน

คุณสามารถรวมการสนับสนุนภาษาที่หลากหลายของ Universal Ctags และฐานข้อมูลของ GNU GLOBAL ได้โดยใช้ ctags เป็นตัวแยกวิเคราะห์ปลั๊กอินของ GLOBAL

ลองทำดังต่อไปนี้: (ต้องใช้ GLOBAL-6.5.3 + และ Universal Ctags ตามลำดับ)

การสร้าง GNU GLOBAL:

$ ./configure --with-universal-ctags=/usr/local/bin/ctags
$ sudo make install

การใช้งาน:

$ export GTAGSCONF=/usr/local/share/gtags/gtags.conf
$ export GTAGSLABEL=new-ctags
$ gtags                     # invokes Universal Ctags internally
$ emacs -f gtags-mode       # load gtags.el

(อย่างไรก็ตามคุณไม่สามารถดำเนินการอ้างอิงด้วยวิธีนี้ได้เนื่องจาก ctags ไม่ถือว่าการอ้างอิง)

คุณยังสามารถใช้ cscope เป็นไคลเอนต์ของ GNU GLOBAL แพ็คเกจ GLOBAL มีคำสั่งที่ชื่อว่า 'gtags-cscope' ซึ่งเป็นพอร์ตของ cscope นั่นคือมันเป็น cscope เองยกเว้นว่าจะใช้ GLOBAL เป็นเครื่องมือค้นหาแทนที่จะใช้ cscope

$ gtags-cscope          # this is GLOBAL version of cscope

ด้วยชุดค่าผสมคุณสามารถใช้กล้องจุลทรรศน์ได้ 41 ภาษา

โชคดี!


1
สำหรับผู้ใช้บน Debian และอนุพันธ์เช่น Ubuntu: หน้าเว็บ GNU GLOBAL เตือนว่าแพ็คเกจ. deb ที่มาพร้อมกับลีนุกซ์รุ่นเหล่านี้เป็นวันที่และไม่ควรใช้ ในกรณีของฉัน GLOBAL เป็นเวอร์ชัน 5.7.1 และฉันไม่สามารถรับ gtags.el, ggtags.el หรือ helm-gtags.el เพื่อให้ทำงานได้อย่างถูกต้องบน Emacs 24. รวบรวม GNU GLOBAL 6.5 ตั้งแต่เริ่มต้นโดยรองรับ Ctags ที่อุดมสมบูรณ์ ( ฉันใช้ 5.8) ได้ผลการรักษา (ขอบคุณสำหรับคำแนะนำที่ยอดเยี่ยม @shigio)
Rob

9

ไฟล์ TAGS มีคำจำกัดความ

TAGSไฟล์มีรายชื่อของที่ทำงานและเรียนที่กำหนดไว้ โดยปกติจะอยู่ในรูทของโปรเจ็กต์และมีลักษณะดังนี้:

^L
configure,3945
as_fn_success () { as_fn_return 0; }^?as_fn_success^A180,5465
as_fn_failure () { as_fn_return 1; }^?as_fn_failure^A181,5502
as_fn_ret_success () { return 0; }^?as_fn_ret_success^A182,5539
as_fn_ret_failure () { return 1; }^?as_fn_ret_failure^A183,5574

สิ่งนี้ทำให้ Emacs สามารถค้นหาคำจำกัดความได้ การนำทางขั้นพื้นฐานมาพร้อมกับfind-tagแต่etags-selectมี UI ที่ดีกว่าเมื่อมีการแข่งขันหลายรายการ

คุณยังสามารถใช้ไฟล์ TAGS เพื่อเติมโค้ดได้อีกด้วย ยกตัวอย่างเช่นetags ของ บริษัท ส่วนหลังไฟล์ใช้แท็ก

ไฟล์ TAGS สามารถสร้างขึ้นโดยเครื่องมือต่างๆ

ctags(เดิมเรียกว่า 'แท็กสากล' หรือ 'แท็กที่อุดมสมบูรณ์') สามารถสร้างไฟล์ TAGS และรองรับภาษาที่หลากหลายที่สุด มันได้รับการดูแลอย่างแข็งขันบน github

Emacs มาพร้อมกับสองโปรแกรมที่สร้างไฟล์ TAGS เรียกว่าetagsและctags. Emacs ctagsเป็นเพียงetagsอินเทอร์เฟซ CLI เดียวกับ ctags สากล เพื่อหลีกเลี่ยงความสับสน distros หลายแห่งเปลี่ยนชื่อโปรแกรมเหล่านี้ (เช่นctags.emacs24ใน Debian)

นอกจากนี้ยังมีเครื่องมือเฉพาะภาษาสำหรับสร้างไฟล์ TAGS เช่นjsctagsและhasktags.

รูปแบบไฟล์อื่น ๆ

ebrowseเป็นโปรแกรม C ที่มาพร้อมกับ Emacs ทำดัชนีรหัส C / C ++ และสร้างBROWSEไฟล์ ebrowse.el ให้คำจำกัดความและความสมบูรณ์ของการค้นหาตามปกติ คุณยังสามารถเปิดBROWSEไฟล์ได้โดยตรงใน Emacs เพื่อดูภาพรวมของคลาส / ฟังก์ชันที่กำหนดโค้ดเบส

GNU ทั่วโลกมีรูปแบบของตัวเองฐานข้อมูลซึ่งประกอบด้วยGTAGS, GRTAGSและGPATHไฟล์ คุณสามารถสร้างไฟล์เหล่านี้ด้วยgtagsคำสั่งซึ่งจะแยกวิเคราะห์รหัส C / C ++ สำหรับภาษาอื่น GNU Global สามารถอ่านไฟล์ที่สร้างโดยแท็กสากล

GNU Global ยังมีอินเทอร์เฟซ CLI สำหรับถามคำถามที่ซับซ้อนมากขึ้นเช่น 'สัญลักษณ์นี้กล่าวถึงที่ไหน?' มันมาพร้อมกับแพ็คเกจ Emacs gtags.el แต่ggtags.elยังเป็นที่นิยมในการเข้าถึงฐานข้อมูล GNU Global

Cscopeมีความคล้ายคลึงกับ GNU Global: มันแยกวิเคราะห์ C / C ++ เป็นรูปแบบฐานข้อมูลของตัวเอง นอกจากนี้ยังสามารถตอบคำถามเช่น 'ค้นหาผู้โทร / ผู้โทรทั้งหมดของ funciton นี้'

ดูเพิ่มเติมนี้การอภิปราย HN เปรียบเทียบระดับโลกและ cscope

โครงการไคลเอนต์ / เซิร์ฟเวอร์

rtagsแยกวิเคราะห์และจัดทำดัชนี C / C ++ โดยใช้เซิร์ฟเวอร์ถาวร มันใช้ตัวแยกวิเคราะห์เสียงดังดังนั้นจึงจัดการกับ C ++ ได้ดีจริงๆ มันมาพร้อมกับแพ็คเกจ Emacs เพื่อสอบถามเซิร์ฟเวอร์

google-gtagsเป็นโครงการที่จะจัดเก็บไฟล์ TAGS ขนาดใหญ่บนเซิร์ฟเวอร์ เมื่อคุณสอบถามเซิร์ฟเวอร์เซิร์ฟเวอร์จะให้ไฟล์ TAGS ย่อยที่เกี่ยวข้องกับการค้นหาของคุณ

ความหมาย (CEDET)

Semantic เป็นแพ็คเกจ Emacs ในตัวที่มีตัวแยกวิเคราะห์สำหรับ C / C ++ ดังนั้นจึงสามารถค้นหาคำจำกัดความได้เช่นกัน นอกจากนี้ยังสามารถนำเข้าข้อมูลจากไฟล์ TAGS ฐานข้อมูล csope และแหล่งอื่น ๆ CEDET ยังมีฟังก์ชันรูปแบบ IDE ที่ใช้ข้อมูลนี้เช่นการสร้างไดอะแกรม UML ของลำดับชั้นของคลาส


7

[คำตอบปรับปรุงจากshigio 's]

ฉันจะพยายามเพิ่มคำอธิบายในส่วนที่ 1 ของคำถาม

มันคืออะไร?

  1. etagsสร้างTAGSไฟล์ซึ่งเป็นรูปแบบแท็กไฟล์สำหรับ Emacs คุณสามารถใช้ไฟล์ Etags etags.elซึ่งเป็นส่วนหนึ่งของ Emacs
  2. Ctagsเป็นคำทั่วไปสำหรับทุกสิ่งที่สามารถสร้างtagsไฟล์ซึ่งเป็นรูปแบบไฟล์แท็กเนทีฟสำหรับ Vi Universal Ctags (aka UCtagsเดิมชื่อ Exuberant Ctags) สามารถสร้าง Etags ได้ด้วย-eตัวเลือก
  3. cscopeเป็น all-in-one รหัสแหล่งเครื่องมือสำหรับการเรียกดู C (ด้วยการสนับสนุนน้อยสำหรับ C ++ และ Java) กับฐานข้อมูลแท็กของตัวเอง ( cscope.in.out, cscope.out, cscope.po.out) และตุ๋ย รองรับ Cscope ในตัวสำหรับ Vim; คุณสามารถใช้ cscope จาก Emacs ใช้แพคเกจ xcscope.el นอกจากนี้ยังมีGUIs cscope ตาม
  4. GNU GLOBAL (aka Gtags) เป็นระบบการติดแท็กซอร์สโค้ดอีกระบบหนึ่ง (มีความแตกต่างอย่างมีนัยสำคัญ - ดูหัวข้อถัดไป) ซึ่งจะสร้างไฟล์แท็กด้วย

การเปรียบเทียบ

  • Ctags และ Etags ใช้เฉพาะคำจำกัดความ (ของเช่นตัวแปรและฟังก์ชัน) Cscope และ Gtags ยังถือว่าการอ้างอิง
  • ctags และ etags ไฟล์แท็กเป็นแบน ไฟล์แท็ก Cscope และ Gtags เป็นฐานข้อมูลคีย์ - ค่าที่มีประสิทธิภาพมากขึ้นซึ่งช่วยให้ (เช่น) การอัปเดตที่เพิ่มขึ้น
  • Cscope และ Gtags มีgrepเครื่องมือค้นหาเหมือน
  • ctags ได้ในตัวสนับสนุนสำหรับภาษาอื่น ๆ และรูปแบบข้อมูล: ดูปัจจุบันในพื้นที่เก็บข้อมูลรายชื่อของยูนิเวอร์แซ parsers UCtags ยังได้รับการบันทึกวิธีการพัฒนา parser
  • Cscope และ Gtags ไม่ขึ้นอยู่กับบรรณาธิการ
  • Gtags ไม่มีอินเทอร์เฟซผู้ใช้ของตัวเอง แต่ปัจจุบันสามารถใช้ (ต.ค. 2016) จาก commandline (CLI), Emacs และญาติ, Vi และญาติ, less(เพจเจอร์), Doxygenและเว็บเบราว์เซอร์ใด ๆ
  • Gtags มีให้gtags.elผ่านแพ็คเกจ GLOBAL แต่ยังมีส่วนขยาย elisp อื่น ๆ อีกมากมายเช่น xgtags.el, ggtags.el, อะไรก็ได้-gtags.el, helm-gtags.el

การรวมกัน

คุณสามารถรวมการรองรับภาษาที่หลากหลายของ Universal Ctags เข้ากับฐานข้อมูล Gtags และส่วนขยายจำนวนมากโดยใช้ Ctags เป็นตัวแยกวิเคราะห์ปลั๊กอิน GLOBAL :

# build GNU GLOBAL
./configure --with-exuberant-ctags=/usr/local/bin/ctags
sudo make install

# use it
export GTAGSCONF=/usr/local/share/gtags/gtags.conf
export GTAGSLABEL=ctags
gtags                     # invokes Universal Ctags internally
emacs -f gtags-mode       # load gtags.el

โปรดทราบอีกครั้งว่าหากคุณใช้ Ctags เป็นตัวแยกวิเคราะห์สำหรับ Gtags ของคุณคุณจะสูญเสียความสามารถในการจัดการข้อมูลอ้างอิง (เช่นการใช้งานตัวแปรการเรียกใช้ฟังก์ชัน) ซึ่ง Gtags จะมีให้ โดยพื้นฐานแล้วคุณแลกเปลี่ยนการติดตามอ้างอิงของ Gtags สำหรับการสนับสนุนภาษาในตัวที่มากขึ้นของ Ctags

นอกจากนี้คุณยังสามารถใช้ cscope เป็นลูกค้าของ Gtags gtags-cscopeนี้:

โชคดี!


ฉันอ่าน: "โปรดทราบอีกครั้งว่าหากคุณใช้ Ctags เป็นตัวแยกวิเคราะห์สำหรับ Gtags ของคุณคุณจะสูญเสียความสามารถในการจัดการข้อมูลอ้างอิง (เช่นการใช้งานตัวแปรการเรียกใช้ฟังก์ชัน) ซึ่ง Gtags จะมีให้โดยพื้นฐานแล้วคุณจะแลกเปลี่ยนการติดตามอ้างอิงของ Gtags สำหรับ การสนับสนุนภาษาในตัวที่ดีขึ้นของ Ctags " นั่นเป็นความจริงสำหรับ ctags เก่าที่มาพร้อมกับ Emacs หรือยังคงเป็นจริงสำหรับ Universal Ctags? นอกจากนี้ฉันอ่าน "รวมภาษาที่สมบูรณ์ของ Universal Ctag" แต่ในตัวอย่างเชลล์จะใช้--with-exuberant-ctags=...เมื่อตอนนี้ในปี 2019 มี--with-universal-ctagsตัวเลือก ควรเปลี่ยนเป็นอย่างหลังหรือไม่?
bgoodr

3

ฉันไม่ได้ตรวจสอบจริง แต่ตามคู่มือ CEDET ( http://www.randomsample.de/cedetdocs/common/cedet/CScope.html ):

ความหมายสามารถใช้ CScope เป็นส่วนหลังสำหรับการค้นหาฐานข้อมูล ในการเปิดใช้งานให้ใช้:

 (semanticdb-enable-cscope-databases)

สิ่งนี้จะช่วยให้สามารถใช้ cscope สำหรับบัฟเฟอร์ C และ C ++ ทั้งหมด

จากนั้น CScope จะใช้สำหรับการค้นหาทั่วทั้งโปรเจ็กต์เป็นข้อมูลสำรองเมื่อการค้นหาฐานข้อมูลความหมายที่มีอยู่ก่อนแล้วอาจไม่ได้แยกวิเคราะห์ไฟล์ทั้งหมดของคุณ


1
ดูเหมือนจะใช้ไม่ได้ใน Emacs 24.3.1 โดยใช้ vanilla CEDET 2.0 ที่มาพร้อมกับมัน (ไม่มีวิธี semanticdb-enable-cscope-databases)
Rob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.