2009-10-13 4 views
128

A mon travail, je suis tenu de suivre le style de la maison pour l'indentation, qui se présente comme suit:Définition Vim préférences blancs par filetype

  • 2 places lors du codage onglets HTML et Ruby
  • lors du codage javascript, avec tabwidth = 4 recommandé

Quelle est la meilleure façon de spécifier différentes préférences d'espace par type de fichier?

+0

double possible de [Changer le comportement de retrait vim de type de fichier] (http://stackoverflow.com/questions/158968/change-vim-indentation-behaviour-by-file-type) – acgtyrant

+0

Toutes ces réponses m'ont rendu plus confus. Le problème est que les options sont à la hauteur des préférences. La réponse acceptée a cependant une bonne syntaxe. C'était un excellent guide: http://vimcasts.org/transcripts/2/fr/ – Mikuz

Répondre

203

Il existe de nombreuses façons, mais voici une façon simple et facile à comprendre. ajouter ces lignes à votre ~/.vimrc:

autocmd Filetype html setlocal ts=2 sts=2 sw=2 
autocmd Filetype ruby setlocal ts=2 sts=2 sw=2 
autocmd Filetype javascript setlocal ts=4 sts=4 sw=4 
+5

+1 pour: setlocal –

+1

Parfait, merci! – nelstrom

+20

ts = « nombre d'espaces qui dans le fichier utilise » « nombre de places que utilise lors de l'édition » mailles = sw = « nombre d'espaces à utiliser pour (auto) étape tiret » pour plus de détails voir: http://vimdoc.sourceforge.net/htmldoc/quickref.html#option-list – zdsbs

32

+1 à la réponse de Peter, mais fournit une autre solution Vim ainsi. Si vous voulez faire quelque chose de plus compliqué qu'un simple setlocal, comme mettre en place tout un tas d'options, de commandes et de mappages à la fois, alors la fonctionnalité de plugin filetype de vim vient à la rescousse. Vous devez avoir filetype plugin on ou filetype plugin indent on dans votre .vimrc, puis créer un plugin par exemple. ruby, vous pouvez créer ~/.vim/ftplugin/ruby.vim. Techniquement, vous pouvez utiliser toutes les commandes que vous aimez ici, à exécuter quand un fichier Ruby est chargé, mais les recommandées comprennent setlocal, map <buffer>, command -buffer, et la définition des fonctions. Beaucoup plus d'informations sont dans le Guide de l'utilisateur; Si vous êtes assez familier avec les scripts vim, passez à :help 41.11, sinon lisez :help usr_40 et :help usr_41.

+1

Merci, ça me donne beaucoup à lire. – nelstrom

72

La réponse de Peter est assez simple, mais malheureusement, les options ne sont pas bonnes. Vous devez utiliser les options suivantes au lieu:

autocmd Filetype html setlocal ts=2 sw=2 expandtab 
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab 
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab 

A noter également:

  • Vous pouvez faire des caractères de tabulation show vim en utilisant :set list.
  • Une fois que vous avez défini correctement les options onglet/espace, vous pouvez faire en sorte que vim répare le fichier (remplacez les espaces par des tabulations ou vice versa) à l'aide de la commande :retab!.
+2

Quel est l'avantage de 'expandtab' sur' sts = 2' –

+12

@JamesMcMahon expandtab étend tous les onglets aux espaces. sts (softtabstop) insère des espaces et des tabulations pour les retraits: autant d'onglets que l'indentation dépend de la taille de tabstop, et ensuite d'espaces après. Bien sûr, si expandtab est activé, tous les onglets insérés sont convertis en espaces. http://stackoverflow.com/questions/1562336/tab-vs-space-preferences-in-vim pourrait aider davantage. Sans l'onglet de développement, la réponse de Peter insérerait des onglets qui ont 2 caractères de large, pas des espaces. – ajmccluskey

9

Il y a aussi un joli script vim: DetectIndent qui essaie de détecter l'indentation d'un fichier que vous ouvrez. C'est très pratique si vous travaillez avec de nombreux fichiers avec un style de codage différent.

J'utilise une autocommande dans mon Vimrc:

:autocmd BufReadPost * :DetectIndent 
0

Pour insérer des caractères d'espace à chaque fois que la touche de tabulation est enfoncée, réglez l'option 'expandtab':

:set expandtab 

L'étape suivante est Pour contrôler le nombre de caractères d'espace qui seront insérés lorsque la touche de tabulation est enfoncée, définissez l'option 'tabstop'.Par exemple, pour insérer 2 l'espace pour un onglet, utilisez:

:set tabstop=2 

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

Questions connexes