En résumé
Il y a plusieurs façons de procéder, dont la plupart ont été suggérées, mais j'ai pensé les résumer avec deux supplémentaires :
- vimrc par répertoire - a l'inconvénient que Vim doit être lancé dans le bon répertoire : si votre projet se trouve dans le répertoire
~/project1
et vous avez ~/project1/.vim.custom
et faire cd ~ ; vim project1/file.c
les paramètres personnalisés ne seront pas trouvés.
- Modelines - très efficace, mais présente l'inconvénient de devoir les ajouter à tous les fichiers (et de ne pas oublier de les ajouter aux nouveaux fichiers).
- Autocommandes spécifiques à un répertoire - très efficace
- Recherche d'un en-tête spécifique dans le fichier (voir ci-dessous) - c'est celui que j'ai le plus utilisé dans le passé lorsque je travaillais pour différentes sociétés ou sur des projets clairement nommés.
- Vimrc par répertoire qui est vérifié lorsque le fichier est ouvert (voir ci-dessous). Une autre option assez facile à mettre en œuvre, surtout si le code de votre projet est regroupé en un seul endroit.
Recherche d'un en-tête
Dans de nombreuses organisations, il y a un en-tête standard (avec un avis de copyright et le nom du projet, etc.) en haut de chaque fichier source. Si c'est le cas, vous pouvez faire en sorte que Vim analyse automatiquement les 10 premières lignes (par exemple) du fichier à la recherche d'un mot-clé. S'il le trouve, il peut modifier vos paramètres. J'ai modifié ceci pour le rendre plus simple que le formulaire que j'utilise (qui fait beaucoup d'autres choses), mais créez un fichier ~/.vim/after/filetype.vim
(si vous n'en avez pas encore) et ajoutez quelque chose comme ceci :
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
Chaque fois qu'un fichier, quel que soit son type, est ouvert et que le type de fichier est défini (la balise au FileType *
ligne), le ConfigureFiletypes
est appelée. Elle vérifie si le type de fichier figure dans la liste des types de fichiers associés au groupe actuel (GROUPNAME), dans ce cas 'c', 'cpp', 'vhdl' ou 'c.doxygen'. Si c'est le cas, il appelle CheckForGROUPNAMECode(), qui lit les 10 premières lignes du fichier et si elles contiennent GROUPNAME, il effectue quelques personnalisations. En plus de définir des onglets d'expansion ou autre, cela modifie également la barre d'état pour afficher clairement le nom du groupe afin que vous sachiez d'un coup d'œil que vous avez travaillé.
Vérification de la configuration à l'ouverture
Tout comme la suggestion de JS Bangs, avoir un fichier de configuration personnalisé peut être utile. Cependant, au lieu de le charger dans vimrc, envisagez quelque chose comme ceci, qui vérifiera, lorsqu'un fichier .c est ouvert, la présence d'un .vim.custom dans le même répertoire que le fichier .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
0 votes
Regarde ça : stackoverflow.com/a/14407951/1099240
0 votes
Voir aussi la question Basculer entre deux configurations différentes de vim sur le super-utilisateur.