2009-05-21 6 views

Répondre

47

Il suffit de mettre les paramètres dans le fichier filetype plugin ~/.vim/ftplugin/LANGUAGE.vim. Mon ~/.vim/ftplugin/perl.vim contient les lignes:

" 
" ---------- tabulator/shiftwidth -------------------- 
" Set tabulator and shift width to 4 (Perl Style Guide) 
" 
setlocal tabstop=4 
setlocal shiftwidth=4 
" 

Ces paramètres seront automatiquement en vigueur pour chaque fichier avec le type de fichier 'perl' (nouvelle ou existante).

+0

Il est triste que nous ayons encore ftplugin pour faire cela. – shabunc

+1

Pourquoi? Cette approche semble plus simple que d'autres mentionnées dans d'autres réponses. – flyer88

+0

ftplugin est une excellente approche pour cela – connorbode

9

Généralement, ce que vous faites est de configurer un fichier de type vimrc spécial avec les paramètres pour une langue particulière, puis d'utiliser les autocommandes dans votre fichier .vimrc principal pour exécuter le vimrc spécial si nécessaire. Voici ma configuration pour Haskell (.hs, etc.) fichiers:

autocmd! BufNewFile,BufReadPre,FileReadPre *.hs so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.hsc so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.lhs so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.cabal so ~/.vim/haskell.vim 

Mon ~/.vim/haskell.vim fait des choses comme « set expandtab » d'utiliser des espaces au lieu des onglets, et toutes sortes d'autres magie pour le formatage et les choses comme ça. Vous pouvez souvent télécharger de bonnes versions de celles-ci pour différentes langues à partir de http://vim.org et d'autres sites.

Notez que vous pouvez faire beaucoup plus que simplement changer les paramètres de vim. Par exemple, vous pouvez exécuter le fichier à travers un filtre avant et après l'édition:

" Edit gpg-encrypted ascii-armoured files 
autocmd! BufReadPre,FileReadPre  *.asc set bin 
autocmd BufReadPost,FileReadPost *.asc '[,']!gpg -q -d 
autocmd BufReadPost,FileReadPost *.asc set nobin 
autocmd! BufWritePre,FileWritePre *.asc set bin 
autocmd BufWritePre,FileWritePre *.asc '[,']!gpg -e 
autocmd BufWritePost,FileWritePost *.asc undo 
autocmd BufWritePost,FileWritePost *.asc set nobin 
+0

Grand, merci. Je vais aller avec cette solution au lieu de celle basée sur ftplugin, parce que cela semble plus propre dans le cas où j'ai plusieurs extensions pour des fichiers utilisant le même langage (comme dans votre exemple Haskell). –

+1

Il y a un petit prix à payer. Les commandes sources (par exemple ~/.vim/haskell.vim) seront exécutées chaque fois que vous passerez dans un tel tampon. –

+4

Ce n'est pas la bonne solution. La solution correcte consiste à utiliser ftplugins (pas besoin d'écrire et de maintenir les autocommandes), et (très important) à utiliser les paramètres locaux. -> s #: set tabstop = #: setlocal tabstop = #. Voir la réponse de fgm. Si votre extension n'est pas reconnue comme haskell, mettez à jour votre base de types de fichiers. Vous ne voulez pas que vim applique la coloration syntaxique correcte à vos fichiers? –

20

Ma réponse est basée sur this tip sur le Wiki VIM. Cette réponse utilise le répertoire "après" afin que vous n'ayez pas à débloquer avec les fichiers plugin fournis pour différents types de fichiers.

Par exemple, pour spécifier les paramètres personnalisés pour les fichiers Python, créez un fichier appelé python.vim pour tenir vos paramètres Python:

setlocal expandtab 
setlocal shiftwidth=4 
setlocal softtabstop=4 

Placez ce fichier dans

  • ~/.vim/after/ftplugin (Linux)
  • $HOME/vimfiles/after/ftplugin (Windows)

Et enfin, vous devez avoir dans votre .vimrc (Linux) ou _vimrc (Windows):

filetype plugin indent on 
+0

Pourquoi la downvote? –

+0

Par erreur, si vous modifiez votre réponse, je peux l'augmenter de nouveau. –

+1

@BjornTipling - il y a cette modification que vous avez demandée il y a un an. :) –

60

Ces autres réponses semblent trop complexes. Au lieu de déconner avec encore plus de répertoires et de fichiers dans votre arborescence ~/.vim, ajoutez simplement ce qui suit à votre ~/.vimrc.

autocmd Filetype python setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4 

(vous pouvez être l33t et paramètres à abrégez et ts=4 sw=4 sts=4). Je trouve cela dans Setting Vim whitespace preferences by filetype

+3

Meilleure réponse IMO, merci. – bryant

+1

Aussi, plus au point que d'autres – cloying

+0

+1 pour l'option de le définir à partir de vimrc. Cela devient plus important quand vous utilisez un gestionnaire de paquets vim (a la vundle) et que vous ne voulez pas commencer à ajouter de la configuration dans des endroits obscurs ... –

2

J'utilise le plugin editor config et ajouter un fichier .editorconfig à tous mes projets - il vous permettra de définir différents paramètres d'indentation pour différents projets utilisant le même langage de programmation qui peuvent être utiles en tant que projets souvent différents dans la même langue ont des normes de codage différentes.

Vous pouvez voir un exemple des types de configuration, vous pouvez définir ici: http://editorconfig.org/

+1

C'est génial car un certain nombre d'autres éditeurs supportent le même fichier .editorconfig (atom, texte sublime, webstorm, visualstudio, etc etc), de sorte qu'il fonctionne bien sur une équipe ou un référentiel où les gens utilisent toutes les différentes saveurs d'éditeurs. – Charlino

Questions connexes