Ctag riang adalah cara paling sederhana untuk mencapai ini. Di bawah GNU / Linux (misalnya Ubuntu atau Debian) Anda seharusnya bisa melakukannya
sudo apt-get install exuberant-ctags
(Untuk OSX "$ brew install ctags" sudah cukup; untuk Windows Anda mungkin ingin mengunjungi http://ctags.sourceforge.net/ dan mengunduh standalone yang dapat dieksekusi)
Kemudian arahkan ke folder root proyek Anda dan jalankan
ctags -R --exclude=.git .
Ini akan memindai seluruh proyek Anda dan membuat file ./tags yang vim akan secara otomatis gunakan untuk memberi Anda kemampuan untuk melompat ke fungsi dengan menekan tombol. Yaitu:
Ctrl + ]
dengan kursor Anda ditempatkan pada fungsi yang Anda ingin lihat implementasinya. Ada kombinasi lain dan banyak fungsi mode perintah yang memungkinkan Anda menavigasi kode Anda dengan ctag juga (misalnya Ctrl+ tuntuk melompat ke entri tumpukan tag yang lebih lama). Lihat :help 29.1
ikhtisar.
Perhatikan bahwa Anda harus menjalankan ulang ctag untuk setiap perubahan signifikan dalam kode dan membiarkannya mengindeks ulang proyek Anda. Anda dapat melakukannya secara manual, atau mengajarkan vim untuk melakukannya dengan hotkey atau menulis.
Petunjuk: jika Anda menggunakan ctag secara ekstensif, mungkin plugin vim-taglist ( http://vim-taglist.sourceforge.net ) juga layak untuk dilihat. Ini memberi Anda garis besar gaya IDE dengan daftar semua fungsi untuk kelas / file itu.
Sejauh ini saya dapat menyebutkan dua solusi untuk masalah menemukan baik deklarasi atau definisi fungsi. Saya tahu ada solusi berbasis tag yang sudah diketahui, tetapi karena saya tidak menggunakannya, saya akan membiarkan orang lain memberikannya kepada Anda.
Yang lebih trendi pertama: YouCompleteMe memiliki
:GoToDefinition
dan:GoToDeclaration
sepasang perintah.Yang saya gunakan (sulit untuk mengubah 10 tahun kebiasaan lama). Saya lh-tag Plugin memiliki cara untuk menghasilkan database ctags dan memperbaruinya secara bertahap. Dan itu juga menawarkan cara (
CTRL+W Meta+Down
) untuk menyajikan semua deklarasi dan definisi yang cocok dengan apa yang ada di bawah kursor (/ apa yang dipilih). Karena solusi ini bergantung pada ctag, itu tidak akan dapat mengetahui yang mana pengenal yang berlebihan di bawah kursor benar-benar terkait juga. Solusi berbasis ctag lainnya harus sama buruknya (/ sebagus) dengan topik ini. Namun YCM harusnya jauh lebih baik di sini.Discl .: Saya menerapkan lh-tag sebagai alternatif yang lebih ergonomis
:tselect
.(Sebenarnya saya ingat solusi ketiga: Saya sudah memulai garpu clang-indexer dan plugin vim terkait yang akan merangkumnya. Tetapi dengan YCM sekitar, saya akan melupakan solusi ini)
EDIT: Pada 2019, solusi paling efisien bergantung pada server LSP . Saya menggunakan COC + ccls untuk mengindeks, melompat dan melakukan banyak hal lagi. Saya kembali ke solusi berbasis tag ketika saya terlalu malas untuk mengkonfigurasi COC untuk proyek di mana saya tidak akan menghabiskan banyak waktu atau di mana saya tidak dapat menginstal clang dan ccl versi terbaru.
sumber
GoToDeclaration
berfungsi dengan beberapa file sumber. Berikut adalah kutipan dari dokumentasi tentangGoToDefinition
:For C-family languages this only works ... when the definition of the symbol is in the current translation unit.
. Juga, perintahnya adalah:YcmCompleter GoTo*
.Ada beberapa alternatif. Yang pertama adalah
ctags
. Jika Anda memerlukan pengindeks yang lebih maju makacscope
merupakan alternatif yang lebih baik. Misalnya itu akan memungkinkan Anda untuk membuat daftar semua penelepon dari fungsi yang diberikan. Alat-alat ini akan mengindeks kode Anda tanpa benar-benar memahaminya dengan benar (mereka memiliki definisi tata bahasa sederhana untuk mengetahui apa arti simbol yang diberikan). Ini juga relatif mudah untuk memperluas tata bahasa itu. Thetaglist
Plugin adalah harus memiliki untuk ini dan itu mungkin untuk memperpanjang pengindeks tata bahasa untuk menunjukkan hasil di taglist.Jika Anda membutuhkan sesuatu yang lebih dari pengindeks kemudian seperti memeriksa sintaks maka
YouCompleteMe
mungkin cara untuk pergi. Itu dibangun di atasllvm
dan dengan demikian memiliki parser yang tepat. Ini memungkinkan untuk memeriksa sintaks dan semantik kode .Kemudian jika Anda bekerja dengan kode yang memiliki bahasa khusus domain atau kode yang disematkan maka Anda sering berakhir hanya dengan melihat-lihat file. Alternatif adalah
Ack
skrip perl yang mencoba membantu dengan tugas ini.sumber
Saya pikir ctag itulah yang Anda butuhkan. Vim terintegrasi dengan ctag secara asli, dan dapat dengan mudah melompat ke definisi dan deklarasi fungsi.
Lihatlah artikel ini http://andrew.stwrt.ca/posts/vim-ctags
sumber