Setelah membuat file tag dengan exuberant-ctags
saya bisa melompat dari panggilan fungsi ke deklarasi <C-]>
yang dengannya cukup nyaman.
Pertanyaan saya adalah bagaimana melakukannya dengan cara lain? Ketika kursor saya berada pada definisi fungsi, bagaimana saya bisa pergi ke baris di mana fungsi dipanggil?
Ketika saya melihat file yang dihasilkan oleh ctags saya hanya melihat informasi yang terkait dengan lokasi definisi dan bukan dari panggilan, apakah itu berarti saya tidak bisa melakukan itu, bahwa Vim sebagai solusi cerdas atau bahwa saya perlu menggunakan sesuatu selain itu exuberant-ctags
?
Jawaban:
Anda tidak dapat melompat berfungsi dengan panggilan
ctags
. Untuk C / C ++ dan Java adacscope
, dan terintegrasi dengan baik dengan Vim (lihat:help cscope
). Untuk bahasa lain Anda mungkin dapat menemukan alat yang menghasilkan / mengeksporcscope
-kompatibel database (fihscope
untuk Haskell, danstarscope
untuk Ruby, Go, dan JavaScript). Anda juga dapat menggunakancscope
dengan basis data global GNU , dengan menunjukcscopeprg
kegtags-cscope
.Di samping catatan: jika Anda tidak menunda dengan sesekali membingungkan penggunaan Engrish,; ) Anda mungkin juga ingin menggunakan universal-ctag bukan
exuberant-ctags
. Yang terakhir belum diperbarui dalam beberapa tahun. Yang pertama adalah garpu yang dipelihara secara aktif.sumber
cscope
sendiri mendukung C / C ++, Lex, dan Yacc. Dukungan untuk Java sedikit berguna. Anda bisa mendapatkan dukungan untuk PHP (gaya lama) dan JavaScript dari GNUglobal
, melaluigtags-cscope
utilitas. Dan, seperti yang saya katakan di atas, ada pengindeks lain yang dapat mengeksporcscope
database yang kompatibel.Anda tidak dapat melakukannya dengan ctags.
Coba alternatif yang lebih keren seperti cscope (yang bahkan memiliki bagian bantuan sendiri:)
:help cscope
atau global .sumber
cscope
itu sendiri tidak mendukung PHP, atau JavaScript. Namun Anda dapat mengindeks file PHP dan JavaScript dengan GNUglobal
, kemudian jalankangtags-cscope
untuk menggunakangtags
file yang dihasilkan dengancscope
.cscope
's sumber bukannya berspekulasi berdasarkan percobaan cepat.cscope
memiliki parser C yang agak santai. Hanya itu yang dimilikinya, dan semua itu dilakukannya. Dengan parser itu "mendukung" banyak bahasa, untuk nilai "dukungan" yang sesuai. Konstruk dikenali asalkan lebih atau kurang mirip dengan C. Itulah mengapa kelas Java dan konstruk PHP baru tidak dikenali. Bandingkan fi dengan starscope , yang sebenarnya memungkinkan penambahan bahasa baru.Anda bisa menggunakan perintah grim Vim untuk mencari semua file di proyek Anda:
Mari kita letakkan itu di keybind:
Saya menemukan pencarian satu proyek kunci ini sangat berharga ketika saya menjelajahi basis kode besar yang tidak dikenal.
\<
dan\>
merupakan urutan regexp yang menunjukkan awal dan akhir kata, sehingga Anda tidak akan mendapatkan kecocokan sebagian. (-w
Opsi untuk grep mungkin merupakan cara lain untuk mencapai ini.)Namun, ini adalah pencarian yang tidak cerdas , sehingga dapat menghasilkan false-positive jika kata yang sama muncul dalam konteks yang tidak terkait.
Sejujurnya, saya menggunakan versi grep.vim plugin saya yang sudah dimodifikasi sendiri . Ini sedikit ramah untuk digunakan:
src/ lib/
bukan.
) dan mengingat perubahan.\b
harus digunakan daripada\<
dan\>
.Saya mengkonfigurasinya dan mengecualikan beberapa file standar seperti ini .
Untuk akses cepat, saya membuat dua keybinds . F3memungkinkan saya mengedit commandline, F4menggunakan commandline yang sebelumnya dikonfigurasi tanpa penekanan tombol tambahan. Mekanismenya sangat jelek, dan bisa menggunakan beberapa pembersihan, tetapi ini telah membantu saya dengan baik.
sumber