Özetle
Bunu yapmanın birkaç yolu var, bunlardan çoğu önerildi, ancak bunları fazladan iki tane ile özetleyeceğimi düşündüm:
- Dizin başına vimrc - Vim'in doğru dizinde başlatılması dezavantajına sahiptir: projeniz içerisindeyse
~/project1ve varsa ~/project1/.vim.customve yapıyorsanız cd ~ ; vim project1/file.c, özel ayarlar bulunmayacaktır.
- Modelinler - çok etkilidir, ancak bunları tüm dosyalara eklemeye ihtiyaç duyma dezavantajına sahiptir (ve bunları yeni dosyalara eklemeyi unutmayın)
- Dizine özel otomatik komutlar - bu çok etkilidir
- Dosyadaki belirli bir başlığı tarayın (aşağıya bakın) - bu, geçmişte farklı şirketler için veya açıkça adlandırılmış projeler üzerinde çalışırken en çok kullandığım başlıktır.
- Dosya açıldığında kontrol edilen dizin başına vimrc (aşağıya bakın). Özellikle proje kodunuzun hepsi tek bir yerdeyse, uygulanması oldukça kolay olan başka bir yöntem.
Bir Başlık Taranıyor
Birçok kuruluşta, her kaynak dosyanın en üstünde standart bir başlık (telif hakkı bildirimi ve proje adı vb. İle birlikte) bulunur. Bu durumda, Vim'in bir anahtar sözcük arayan dosyanın ilk (örneğin) 10 satırını otomatik olarak taramasını sağlayabilirsiniz. Bulursa, ayarlarınızı değiştirebilir. Bunu kullandığım formdan daha basit hale getirmek için değiştirdim (ki bu pek çok başka şey yapar), ancak ~/.vim/after/filetype.vim(henüz bir tane yoksa) oluşturun ve buna benzer bir şey ekleyin:
au FileType * call <SID>ConfigureFiletypes(expand("<amatch>"))
" List of file types to customise
let s:GROUPNAMETypes = ['c', 'cpp', 'vhdl', 'c.doxygen']
func! <SID>CheckForGROUPNAMECode()
" Check if any of the first ten lines contain "GROUPNAME".
" Read the first ten lines into a variable
let header = getline(1)
for i in range(2, 10)
let header = header . getline(i)
endfor
if header =~ '\<GROUPNAME\>'
" Change the status line to make it clear which
" group we're using
setlocal statusline=%<%f\ (GROUPNAME)\ %h%m%r%=%-14.(%l,%c%V%)\ %P
" Do other customisation here
setlocal et
" etc
endif
endfunc
func! <SID>ConfigureFiletypes(filetype)
if index(s:GROUPNAMETypes, a:filetype) != -1
call <SID>CheckForGROUPNAMECode()
endif
endfunc
Herhangi bir türden bir dosya açıldığında ve dosya türü ayarlandığında ( au FileType *satır), ConfigureFiletypesişlev çağrılır. Bu, dosya türünün mevcut grupla (GRUPNAME) ilişkili dosya türleri listesinde olup olmadığını kontrol eder, bu durumda 'c', 'cpp', 'vhdl' veya 'c.doxygen'. Eğer öyleyse, dosyanın ilk 10 satırını okuyan ve GROUPNAME içeriyorsa bazı özelleştirme yapan CheckForGROUPNAMECode () 'u çağırır. Genişletme sekmeleri veya her neyse, bu aynı zamanda durum çubuğunu da grup adını açıkça gösterecek şekilde değiştirir, böylece bir bakışta çalıştığını bilirsiniz.
Açarken Yapılandırmayı Kontrol Etme
JS Bangs'in önerisine çok benzer şekilde, özel bir yapılandırma dosyasına sahip olmak faydalı olabilir. Ancak, onu vimrc'ye yüklemek yerine, bunun gibi bir şey düşünün; bu, .c dosyasıyla aynı dizindeki .vim.custom için bir .c dosyası açıldığında kontrol edecektir.
au BufNewFile,BufRead *.c call CheckForCustomConfiguration()
function! CheckForCustomConfiguration()
" Check for .vim.custom in the directory containing the newly opened file
let custom_config_file = expand('%:p:h') . '/.vim.custom'
if filereadable(custom_config_file)
exe 'source' custom_config_file
endif
endfunction