W podsumowaniu
Jest na to kilka sposobów, z których większość została zaproponowana, ale pomyślałem, że podsumuję je dwoma dodatkowymi:
- Vimrc dla katalogu - ma tę wadę, że Vim musi być uruchamiany w odpowiednim katalogu: jeśli twój projekt jest w
~/project1
i masz ~/project1/.vim.custom
i robisz cd ~ ; vim project1/file.c
, niestandardowe ustawienia nie zostaną znalezione.
- Modelines - bardzo efektywne, ale ma tę wadę, że trzeba je dodawać do wszystkich plików (i pamiętać o dodawaniu ich do nowych plików)
- Autokomendy specyficzne dla katalogu - jest to bardzo efektywne
- Skanuj w poszukiwaniu określonego nagłówka w pliku (patrz poniżej) - jest to ten, z którego korzystałem najczęściej w przeszłości, pracując dla różnych firm lub nad wyraźnie nazwanymi projektami
- Vimrc dla katalogu, który jest sprawdzany, gdy plik jest otwierany (patrz poniżej). Kolejny dość łatwy do zaimplementowania, zwłaszcza jeśli kod projektu znajduje się w jednym miejscu.
Wyszukiwanie nagłówka
W wielu organizacjach na górze każdego pliku źródłowego znajduje się standardowy nagłówek (z informacją o prawach autorskich, nazwą projektu itp.). Jeśli tak jest, możesz zmusić Vima do automatycznego skanowania pierwszych (np.) 10 linii pliku w poszukiwaniu słowa kluczowego. Jeśli go znajdzie, może zmienić Twoje ustawienia. Zmodyfikowałem to, aby było prostsze niż formularz, którego używam (który robi wiele innych rzeczy), ale stwórz ~/.vim/after/filetype.vim
(jeśli jeszcze go nie masz) i dodaj coś takiego:
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
Za każdym razem, gdy otwierany jest plik dowolnego typu i ustawiany jest typ pliku ( au FileType *
linia), ConfigureFiletypes
wywoływana jest funkcja. Sprawdza, czy typ pliku znajduje się na liście typów plików związanych z bieżącą grupą (NAZWA GRUPY), w tym przypadku „c”, „cpp”, „vhdl” lub „c.doxygen”. Jeśli tak, wywołuje CheckForGROUPNAMECode (), który odczytuje pierwsze 10 wierszy pliku i jeśli zawierają GROUPNAME, dokonuje pewnych dostosowań. Oprócz ustawiania zakładek rozwijanych lub czegokolwiek, zmienia to również pasek stanu, aby wyraźnie pokazywać nazwę grupy, dzięki czemu od razu wiesz, że działa.
Sprawdzanie konfiguracji podczas otwierania
Podobnie jak w przypadku sugestii JS Bangsa, posiadanie niestandardowego pliku konfiguracyjnego może być przydatne. Jednak zamiast ładować go do vimrc, rozważ coś takiego, które sprawdzi, kiedy plik .c zostanie otwarty dla pliku .vim.custom w tym samym katalogu co plik .c.
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