Menavigasi proyek kode tanpa menggunakan perintah eksternal


9

Saya mencoba mengumpulkan kotak alat perintah / permintaan Vim, dalam mode perintah atau pencarian, untuk menavigasi basis kode tanpa menggunakan Ctags atau alat eksternal lainnya. Ctag sangat bagus tetapi dukungan dapat bervariasi tergantung pada lingkungan pengembangan tempat Anda terjebak. Saya hanya ingin mengandalkan pengetahuan Vim.


4
Mungkin Anda harus mengatakan "alat eksternal" bukan "ctags", karena saran pertama saya adalah cscope.
muru

1
Satu hal yang saya gunakan adalah perintah gd. Ini membawa kursor ke deklarasi lokal dari variabel di bawah kursor.
nitishch

@muru Saya tidak ingin menggunakan alat eksternal. Apa yang saya coba pelajari adalah teknik untuk menavigasi basis kode secara efisien hanya menggunakan perintah Vim. Saya tahu itu bisa dilakukan, tetapi jelas membutuhkan pengetahuan Vim yang lebih dalam daripada yang saya miliki. Mungkin bukan pertanyaan SE yang baik karena sudah begitu terbuka berakhir tetapi saya tidak tahu harus mencari ke mana lagi.
user1332148

Jawaban:


11

"Sertakan pencarian" adalah salah satu alat tersebut:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

Terkait dengan "sertakan pencarian", "pencarian definisi" juga menarik:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

Kedua alat bergantung pada berbagai opsi yang mungkin atau mungkin tidak diatur oleh plugin tipe file Anda.

Lihat :help include-search.


Anda juga dapat menggunakan gddan gDsebagai versi ringan dari [Ddan ]D.

Lihat :help gd.


Dalam buffer saat ini, perintah di bawah ini akan mencantumkan setiap definisi fungsi dan nomor barisnya:

:g/func/#

Lihat :help :g.


:grepdan :vimgrepjuga bermanfaat, jika hanya karena hasilnya dimasukkan ke dalam daftar perbaikan cepat yang dapat dinavigasi dengan :cn, :cp... dan ditampilkan di jendela perbaikan cepat yang sangat berguna.

Lihat :help :grep, :help :vimgrepdan :help quickfix.


Berbicara tentang daftar quickfix / jendela, saya menulis fungsi ini (berdasarkan karya orang lain) untuk menampilkan hasil [I, ]I, :ilist, [D, ]Ddan :dlistdalam daftar quickfix / jendela. YMMV tentu saja.


Meskipun tidak sepenuhnya alat navigasi, saya menemukan jendela pratinjau sangat berguna untuk melihat tanda tangan dari fungsi yang saya kerjakan.

Lihat :help preview-window.


Yang mengatakan ...

Vim tidak tahu apa-apa tentang kode Anda di luar beberapa pola regex yang mungkin cocok atau tidak cocok dengan gaya pengkodean Anda atau apa pun. Ini berarti bahwa navigasi kode lebih baik dilakukan dengan bantuan alat eksternal seperti ctag, cscope atau GNU GLOBAL.


5

Ada banyak cara untuk menavigasi kode (termasuk dalam Vim dan eksternal), saya masih menemukannya. Apa yang saya gunakan dalam pekerjaan sehari-hari adalah:

  • Greping teks dalam file proyek dan menavigasi melalui jendela perbaikan cepat (saya menggunakan pencari perak untuk greping).
  • Menggunakan plugin terkait bahasa, saya tahu ada yang untuk javascript, ruby, go, yang memungkinkan untuk beralih antar modul program (dalam plugin javascript adalah gf-command
  • Ctrl+O, Ctrl+I- melompat mundur atau maju dalam "riwayat" navigasi
  • g; - lompat ke tempat yang terakhir diedit dalam file
  • Menggunakan tanda untuk menempatkan "bookmark" di tempat-tempat tertentu. Anda dapat menempatkan tanda dengan '[some_letter]perintah, jika huruf adalah huruf kapital maka Anda akan mendapatkan tanda yang akan dapat dijangkau dari file apa saja (buffer).
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.