Bagaimana Anda mengelola proyek besar (ratusan file) hanya dengan menggunakan VIM?
Saya pribadi mulai mengalami masalah dalam proyek yang lebih besar dari yang kecil.
- adakah cara untuk 'membuka file' dengan cepat, lebih disukai dengan melengkapi nama?
- sama untuk 'go to class definition', jika ada di file lain
Saya agak tahu semua dasar-dasar VIM, jadi saya tidak punya masalah menggunakannya untuk menulis skrip atau mengedit cepat beberapa kode sumber. Tapi itu menjadi sangat berantakan bagi saya ketika saya harus menavigasi antar file.
NERDTree
Jawaban:
VIM memiliki dukungan yang sangat baik untuk tag . Setelah Anda membuat file tag untuk proyek Anda, Anda dapat melompat ke definisi atau deklarasi metode, kelas, dll., Termasuk melompati file, semuanya di dalam sesi pengeditan yang sama.
Mencoba
Untuk membuat file tag untuk C / C ++, buka prompt shell Anda (saya berasumsi sistem Anda adalah * nix / Cygwin) dan ketik
atau
sumber
:help cscope
informasi. Ada daftar fitur bagus dalam pendahuluan (di bawah "Ini dirancang untuk menjawab pertanyaan seperti").Saya suka solusi sederhana, cara favorit saya untuk menavigasi saat ini adalah:
Tambahkan
~/.vimrc.local
Kemudian ketik ini di editor untuk menemukan file di mana saja di direktori kerja saat ini (pwd)
Anda dapat menggunakan pelengkapan tab pada nama file untuk menemukan banyak pilihan juga, membuat konversi TextMate ini sangat menyenangkan.
sumber
vim .
sebelum menjalankan perintah: /Saya menggunakan kombinasi NERDTree (sidebar direktori), FuzzyFinder Textmate (go-to-file seperti CMD + T TextMate), dan Sessions (: sesi h) untuk membantu saya menangani proyek-proyek besar.
Saya akan menyarankan menggunakan beberapa plugin pembantu sesi. Saya akan menyebutkan apa yang saya gunakan, tetapi saya belum puas dengannya. Hanya Google "sesi vim".
Satu hal yang perlu diperhatikan agar FuzzyFinder Textmate berfungsi adalah bahwa itu bergantung pada versi lama plugin FuzzyFinder, khususnya v2.16. Apa pun yang lebih tinggi dan Anda akan mendapatkan kesalahan. Tapi itu pasti sepadan dengan masalahnya. Meskipun tidak memiliki penyelesaian nama, pencariannya cerdas jadi jika saya mencarinya
fro/time/actionsphp
akan menarik fileapps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)
(tanda kurung menunjukkan apa yang cocok). Itu membuatnya sangat mudah untuk memilih file yang hanya unik menurut nama foldernya.sumber
Serta ctag yang tak ternilai dan berbagai perintah terkait. Saya juga tidak bisa hidup tanpa plugin proyek , yang memungkinkan Anda untuk memiliki file yang diinginkan terkait dengan proyek di panel terpisah. Saya tidak ingat berapa banyak pengaturan saya yang disesuaikan, tetapi jika saya ingin membuka file sumber bernama Debug.c, saya menekan:
Saya kemudian sering melakukan:
Dengan urutan yang relatif singkat ini, saya dapat membuka file apa pun dan headernya dalam pemisahan vertikal. Karena jendela plugin proyek hanyalah file teks, penyelesaian dicapai dengan menggunakan kemampuan pencarian Vim.
sumber
Mulai Vim 7.3,
:find
perintah memiliki tab-penyelesaian nama file.Jadi, jika Anda menetapkan
'path'
pilihan untuk mengandung seluruh proyek Anda (mungkin menggunakan**
wildcard untuk memungkinkan rekursif mencari subdirektori), maka Anda dapat menggunakan:find
,:sfind
,:tabfind
, dll perintah dengan selesainya untuk mendapatkan file dalam proyek Anda. Ini juga memungkinkan melompat ke file secara langsung dengangf
dan teman jika nama file ada dalam teks Anda, misalnya dalam perintah include.Dengan metode ini, tidak ada alat atau plugin eksternal yang diperlukan untuk menavigasi ke file tertentu. Meskipun demikian, mungkin diakui tidak secepat atau mudah digunakan, dan tidak menjawab kebutuhan untuk melompat ke definisi. Untuk definisi, saya menggunakan ctag sebagai saran jawaban lain.
sumber
Jika Anda menggunakan ctag seperti yang direkomendasikan oleh poster lain, pastikan Anda melihat plugin daftar tag .
Pastikan Anda meluangkan waktu untuk membaca dokumen dan mempelajari pengikatan kuncinya. Berikut adalah beberapa untuk Anda mulai (dari jendela TList):
sumber
Ctag yang riang.
Gunakan Ctrl-] untuk melompat ke tag di bawah kursor.
sumber
Saya menggunakan FindFile . Jika Anda membuka vim di root proyek Anda dan menjalankan
:FC .
plugin akan menyimpan semua nama file di bawah cwd Anda. Anda kemudian dapat melakukannya:FF
untuk membuka menu penyelesaian dan mengetik nama file yang Anda inginkan (atau lebih tepatnya, beberapa huruf pertama).sumber
FC .
di direktori root Anda, lalu:FF
enter, mulai ketik nama file yang Anda inginkan dan selesai. Saya masih mencoba mencari cara untuk meluncurkan di tab baru ..:FC .
ke cache di direktori itu.:FT
atau:FindTabNew
gist.github.com/1104884Membuka
vim
dari root file sumber Anda dan memperluaspath
opsi untuk memasukkan semua sub-direktori di dalamnya.Misalnya
set path+=/usr/include/c++/**
untuk header C ++ danset path+=**
untuk direktori sumber Anda.Ini, kemudian, membuka sejumlah besar kemungkinan berikut.
1) Membuka file dengan nama atau bagiannya
Anda dapat menggunakan pelengkapan otomatis dan perluasan karakter pengganti dengan
:find
andal. Anda mengetik namanya, itu akan menemukan namanya. Ini bekerja dengan bahasa agnostik. Saya yakin Anda akan menyukainya.2) Menavigasi ke file di bawah cusror:
jika Anda ingin pergi ke jalur file seperti
#include "project/path/classA.h
.Ctrl- 6- untuk kembali ke posisi kursor terakhir setelah
gf
ataugF
3) Pencarian API dan menavigasi ke lokasi API
[i
atau[I
dapat digunakan untuk mencari tanda tangan fungsi Anda untuk kata di bawah kursor tanpa meninggalkan ruang kerja Anda.[<Tab>
untuk benar-benar pergi ke deklarasi. Gunakan Ctrl- 6untuk kembali ke lokasi terakhir.Tanpa memperluas
path
, Anda dapat mulai menavigasi file dengan:Ex
perintah dan menavigasi serta membuka file Anda. Saya lebih sukaNerdTree
daripada ini.sumber
Meskipun saya agak berharap seseorang akan menunjukkan solusi yang lebih baik sehingga saya dapat mempelajari sesuatu, NERDTree telah membantu saya untuk mendapatkan file tertentu dengan pelengkapan nama selama saya memiliki pohon yang diperluas. Perintah ketika saya perlu membuka file adalah seperti:
, d / foo.pyo (di mana foo.py adalah nama file)
, d untuk membuka pohon, / untuk masuk ke mode pencarian, nama (atau nama parsial, atau regex, atau apapun) file, dan kemudian o untuk membukanya.
Tentu saja Anda mungkin harus menekan 'n' beberapa kali jika Anda tidak mengetik cukup nama file atau ada duplikat.
Saya akui rasanya seperti sedikit retasan menggunakan NERDTree seperti ini meskipun itu sudah sejauh ini ke dalam memori otot saya sekarang sehingga saya bahkan tidak memikirkannya.
Tentu saja saya menggunakan ctag juga tetapi itu hanya berguna ketika Anda memiliki fungsi di dekat kursor dan perlu mendapatkan definisinya di file lain atau sesuatu. Sering kali saya berkata "Oke, saya perlu mengerjakan fitur x sekarang" dan perlu menavigasi ke file lain tanpa referensi di sekitar yang akan sangat membantu oleh ctag.
sumber
Saya menggunakan dua plugin saya:
<c-w><m-down>
secara default. Anda mungkin ingin memeriksa plugin daftar tag terkenal sebagai gantinya.Keduanya membutuhkan perpustakaan viml saya lh-vim-lib.
sumber
Coba SourceCodeObedinece . Yang ini saya kembangkan untuk menangani proyek file sumber C ++ 1Gb.
Saya menggunakannya berpasangan dengan 0scan .
Kedua plugin ini membungkus alat penjelajahan Vim paling populer: ctags dan cscope .
sumber