จะข้ามไปยังฟังก์ชั่นการโทรได้อย่างไร?


14

หลังจากสร้างไฟล์แท็กด้วยexuberant-ctagsฉันสามารถข้ามจากการเรียกใช้ฟังก์ชันไปยังการประกาศ<C-]>ซึ่งสะดวกมาก

คำถามของฉันคือทำอย่างไรในทางอื่น? เมื่อเคอร์เซอร์อยู่บนคำจำกัดความของฟังก์ชันฉันจะไปยังบรรทัดที่เรียกใช้ฟังก์ชันได้อย่างไร

เมื่อฉันดูไฟล์ที่สร้างโดย ctags ฉันเห็นเฉพาะข้อมูลที่เกี่ยวข้องกับตำแหน่งของคำจำกัดความและไม่ใช่การโทรหมายความว่าฉันไม่สามารถทำได้ Vim นั้นเป็นวิธีแก้ปัญหาที่ชาญฉลาดหรือฉันต้องใช้บางสิ่งบางอย่าง นอกเหนือจากนี้exuberant-ctags?


Ack หรือ Ag จะใช้งานได้และคุณสามารถค้นหาโปรแกรมเสริมสำหรับเครื่องมือบรรทัดคำสั่งเหล่านี้ได้อย่างง่ายดาย เช่นgithub.com/mileszs/ack.vimและgithub.com/rking/ag.vim
dash-tom-bang

คำตอบ:


11

ctagsคุณไม่สามารถข้ามไปยังฟังก์ชั่นการโทรด้วย สำหรับ C / C ++ และ Java นั้นมีcscopeและมันรวมเข้ากับ Vim (ดู:help cscope) สำหรับภาษาอื่นคุณสามารถค้นหาเครื่องมือที่สร้าง / ส่งออก - cscopeฐานข้อมูลที่เข้ากันได้ (fi hscopeสำหรับ Haskell และstarscopeสำหรับ Ruby, Go และ JavaScript) นอกจากนี้คุณยังสามารถใช้cscopeกับโลก GNUฐานข้อมูลโดยชี้ไปที่cscopeprggtags-cscope

สังเกตด้านบน: ถ้าคุณไม่ได้นำออกโดยบางครั้งทำให้งงใช้อิงริช ,;) คุณอาจยังต้องการที่จะใช้สากล ctagsexuberant-ctagsแทน หลังไม่ได้รับการปรับปรุงในปี อดีตเป็นทางแยกการบำรุงรักษาอย่างแข็งขัน


cscope รองรับภาษาอื่นนอกเหนือจาก C / C ++ และ Java หรือไม่
edi9999

@ edi9999 cscopeสนับสนุน C / C ++, Lex และ Yacc การสนับสนุน Java มีประโยชน์เล็กน้อย คุณสามารถรับการสนับสนุน PHP และ JavaScript แบบเก่าจาก GNU globalผ่านทางgtags-cscopeยูทิลิตี้ และอย่างที่ฉันได้กล่าวไว้ข้างต้นมีตัวสร้างดัชนีอื่น ๆ ที่สามารถส่งออกcscopeฐานข้อมูลที่เข้ากันได้
Sato Katsura

8

คุณไม่สามารถทำได้ด้วย ctags

ลองเป็นทางเลือกที่ beefier เช่นcscope (ซึ่งยังมีส่วนของตัวเองช่วยเหลือ: :help cscope) หรือระดับโลก


cscope รองรับภาษาอื่นนอกเหนือจาก C / C ++ และ Java หรือไม่
edi9999

ใช่อย่างน้อย PHP และ JavaScript
romainl

1
@romainl Nope cscopeไม่สนับสนุน PHP และ JavaScript คุณสามารถอย่างไรก็ตามดัชนี PHP และ JavaScript ไฟล์ที่มี GNU globalเรียกใช้แล้วgtags-cscopeใช้ผลไฟล์ที่มีgtags cscope
Sato Katsura

@SatoKatsura, ใช่, cscope รองรับ JavaScript (และ CSS, เห็นได้ชัด)
romainl

2
@romainl คุณควรพิจารณามองหาที่cscope's แหล่งที่มาแทนการคาดเดาอยู่บนพื้นฐานของการทดลองอย่างรวดเร็ว cscopeมีตัวแยกวิเคราะห์ C ที่ค่อนข้างผ่อนคลาย นั่นคือทั้งหมดที่มีและสิ่งที่ทำ ด้วยเครื่องมือแยกวิเคราะห์มันทำให้ "รองรับ" หลายภาษาสำหรับค่าที่เหมาะสมของ "การสนับสนุน" การสร้างได้รับการยอมรับตราบใดที่พวกเขาดูเหมือน C มากขึ้นหรือน้อยลงซึ่งเป็นเหตุผลที่คลาส fi ของ Java และการสร้าง PHP ที่ใหม่กว่าไม่ได้รับการยอมรับ เปรียบเทียบ fi กับสโคปสโคปซึ่งช่วยเพิ่มภาษาใหม่ได้จริง
Sato Katsura

8

คุณสามารถใช้คำสั่งgrepของ Vim เพื่อค้นหาไฟล์ทั้งหมดในโครงการของคุณ:

:grep! "\<<cword>\>" . -r
:copen

เรามาใส่ keybind:

nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>

ฉันพบว่าการค้นหาทั่วทั้งโครงการที่สำคัญนี้มีค่าเมื่อฉันสำรวจ codebase ที่ไม่คุ้นเคยขนาดใหญ่

\<และ\>เป็นลำดับ regexp ซึ่งระบุจุดเริ่มต้นและจุดสิ้นสุดของคำดังนั้นคุณจะไม่ได้รับการแข่งขันบางส่วน ( -wตัวเลือกสำหรับ grep อาจเป็นอีกวิธีหนึ่งในการบรรลุเป้าหมายนี้)

อย่างไรก็ตามนี่คือการค้นหาที่ไม่ฉลาดดังนั้นมันสามารถสร้างผลบวกปลอมหากคำเดียวกันปรากฏในบริบทที่ไม่เกี่ยวข้อง


ที่จริงแล้วฉันใช้ปลั๊กอิน grep.vim เวอร์ชันที่แก้ไขเองแทน นี่เป็นมิตรที่จะใช้:

  • มันช่วยให้คุณแก้ไขรูปแบบการค้นหาและบรรทัดคำสั่ง grep (เพื่อให้คุณสามารถกำหนดเป้าหมายโฟลเดอร์เฉพาะเช่นsrc/ lib/แทนที่จะเป็น.) และจดจำการเปลี่ยนแปลง
  • ฉันจะเพิ่มการสนับสนุนของ Google csearch สิ่งนี้เร็วกว่า grep มากเพราะมันจะสร้างดัชนีของคำแทนที่จะสแกนแต่ละไฟล์ทุกครั้ง ยวด csearch ใช้มาตรฐาน regexp แตกต่างกันเล็กน้อยดังนั้น\bจะต้องนำมาใช้แทนและ\<\>

ฉันจะกำหนดค่าและแยกไฟล์มาตรฐานบางอย่างเช่นนี้

สำหรับการเข้าถึงอย่างรวดเร็วฉันจะสร้างสอง keybinds F3ให้ฉันแก้ไข commandline F4ใช้ commandline ที่กำหนดไว้ก่อนหน้านี้โดยไม่ต้องกดแป้นพิเศษใด ๆ กลไกนั้นค่อนข้างน่าเกลียดและอาจใช้การล้างข้อมูลบางอย่าง แต่ก็ใช้ได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.