Ada proyek pemrograman yang saya kerjakan di mana orang lain menggunakan tabsize 4, jadi saya menemukannya paling mudah set tabstop=4
di saya ~/.vimrc
. Namun, saya lebih suka tidak memiliki ini mempengaruhi setiap file yang saya edit - hanya yang untuk proyek ini - katakanlah setiap file dalam direktori tertentu (dan subdirektori nya).
Apakah ada cara saya dapat dengan mudah mengatur variabel berdasarkan awalan direktori file?
Jawaban:
Konfigurasi pusat
Jika tidak apa-apa untuk mengkonfigurasi pengecualian lokal secara terpusat, Anda dapat memasukkan autocmds tersebut ke
~/.vimrc
:Di sisi lain, jika Anda ingin konfigurasi khusus disimpan dengan proyek (dan tidak ingin menanamkan ini di semua file melalui modelines ), Anda memiliki dua opsi berikut:
Konfigurasi lokal dengan fungsionalitas bawaan
Jika Anda selalu memulai Vim dari direktori root proyek, built-in
memungkinkan pembacaan
.vimrc
file dari direktori saat ini. Anda dapat menempatkan:set ts=4 sw=4
perintah di sana.Konfigurasi lokal melalui plugin
Jika tidak, Anda memerlukan bantuan plugin; ada beberapa di vim.org; Saya dapat merekomendasikan plugin localrc , yang bahkan memungkinkan konfigurasi spesifik tipe file lokal.
Perhatikan bahwa membaca konfigurasi dari sistem file memiliki implikasi keamanan; Anda mungkin mau
:set secure
.sumber
autocmd
metode yang tidak berfungsi, pastikan Anda tidak memiliki symlink di path Anda - saya harus meletakkan path lengkap tanpa symlink sebelum itu bekerja untuk saya (pada OS X 10.9)Anda dapat mengkonfigurasi vim untuk membaca perintah lebih lanjut menggunakan perintah
source
(so). Tambahkan ini ke~/.vimrc
- Anda mencari direktori saat ini dan jika file .vimrc_proj tidak ditemukan di sana mencari .vimrc_proj di direktori induk.Kemudian tambahkan perintah khusus dalam
.vimrc_proj
file konfigurasi yang sesuai dengan proyek Anda.sumber
Anda dapat menggunakan plugin untuk Vim untuk menyelesaikan masalah dengan cara yang lebih umum dengan mencoba mendeteksi indentasi.
Plugin pilihan bagi saya adalah DetectIndent . Butuh beberapa waktu bagi saya untuk menguji semua garpu plugin untuk menemukan yang sesuai dengan kebutuhan saya. Yang asli sangat dekat tetapi tidak begitu saya membuat garpu sendiri .
Untuk debugging, sangat membantu untuk
:set verbose=1
menjalankan plugin lagi:DetectIndent
sumber
Salah satu solusi yang mungkin belum disebutkan adalah naik satu tingkat di atas dan mengimplementasikan skrip shell khusus proyek untuk menjalankan lingkungan vim Anda.
Ini memungkinkan pengaturan khusus vim untuk dilewatkan menggunakan
-S
opsi baris perintah. Keuntungannya adalah ia juga memungkinkan mengkonfigurasi aspek lingkungan lainnya, seperti pengaturan terminal atau cscope.Sebagai contoh, katakanlah saya memiliki proyek C ++ yang disebut
foo
, di mana saya ingin memuat pengaturan vim file~/.vim/projects/foo.vim
. Saya juga ingin mengatur indeks cscope dan meluncurkan jendela terminal jika perintah dipanggil dari beberapa alat peluncuran cepat atau pintasan desktop. Untuk membuka lingkungan saya, saya memiliki skrip berikut, yang disebutvim-foo
:sumber