2009-09-10 7 views
14

Mon travail de jour implique le codage avec Perl. À la maison, je joue avec Python et Erlang. Pour Perl, je veux indenter mon code avec deux espaces. Alors que pour Python, la norme est 4. J'ai aussi quelques raccourcis clavier pour ouvrir des déclarations de fonctions que je voudrais utiliser avec tous les langages de programmation. Comment cela peut-il être réalisé dans gVim?gVim et plusieurs langages de programmation

Comme dans, est-il un moyen de maintenir un fichier de configuration pour chaque langage de programmation ou quelque chose de ce genre?

Répondre

22

Vous devriez être en mesure de le faire en tirant parti avec ... filetypes par exemple, ajoutez à votre vimrc (et modifier de façon appropriée pour différentes langues):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab 
+20

Ne pas remplacer les paramètres par défaut. Utilisez 'setlocal' (ou 'setl') au lieu de 'set'. Vous ne voulez pas que les paramètres de la dernière coupure automatique se fassent dans d'autres tampons. –

+0

@Maxim - Bonne capture ... :-) –

+2

La commande 'set' accepte plusieurs options. Donc, il est plus facile d'écrire: 'set tabstop = 4 shiftwidth = 4 expandtab' –

23

Dans votre répertoire $ HOME, faire .vim/répertoire (ou vimfiles/sous Windows), dans le faire ftplugin/répertoire, et il conserver les fichiers nommés « perl.vim » ou « python.vim » ou « html.vim » ou ...

Ceux-ci devraient être chargées automatiquement lorsque vous ouvrez/créez un nouveau fichier de type donné tant que vous n'oubliez pas d'ajouter :filetype plugin on dans votre fichier .vimrc (ou _vimrc sous Windows)

Ensuite, les options vim doivent être définies avec :setlocal (et non :set, sinon leur définition remplacera le paramètre global par défaut).

Les correspondances sont définies avec :n/i/v(nore)map <buffer>, ainsi que les abréviations. Les commandes sont définies avec l'option -b. Les menus ne peuvent pas être rendus locaux sans l'aide d'un plugin.

local, <buffer>, et -b sont importants pour prévenir les effets secondaires.

+0

Si vous êtes sur Windows, voyez ": help dos-locations". –

+0

+1 Je ne savais pas que les commandes pouvaient être définies pour un seul tampon! –

3

Voici comment je le fais. Ci-dessous est un extrait de mon .vimrc, et je maintiens d'autres configs par langue, et les charge quand un nouveau tampon est chargé.

" HTML 
autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml 
" XML 
autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml 
" Perl 
autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl 

Notez que bien que je me procure un fichier, je peux exécuter n'importe quelle commande VIM ou appeler une fonction. par exemple. pour le chargement d'un nouveau fichier Java Je fais ceci:

autocmd BufNewFile *.java call GeneratePackage() 

GeneratePackage() est une fonction de VIM.

+0

autocmd FileType ... est préférable car vous séparez la détection de type de fichier (avec BufNewFile) des actions effectuées pour ce type de fichier. – joeforker

7

En plus de la réponse de rangerchris, vous pourriez envisager d'utiliser des modelines. Modelines dire l'éditeur comment se configurer:

#!/usr/bin/perl 
# vi: ts=4 sw=4 ht=4 et textwidth=76 : 

use strict; 
use warnings; 

print "hello world\n"; 

Ce modeline dit vi d'utiliser 4 onglets de caractères et indentation automatique, d'utiliser des espaces au lieu des onglets, et qu'il devrait insérer un saut de ligne lorsque le curseur arrive à 76 caractères.

Vous pouvez contrôler la façon dont Vim lit modelines avec deux variables (très probablement définies dans votre .vimrc):

set modeline 
set modelines=5 

La variable modeline dit Vim de chercher modelines si elle est définie. La variable modelines indique à Vim combien de lignes du haut et du bas doivent être recherchées pour rechercher la modeline (dans ce cas, elle trouvera le modeline s'il se trouve dans la première ou les cinq dernières lignes du fichier).

Comme tout système qui reçoit des instructions de sources non fiables, les modelines peuvent être un security threat, donc l'utilisateur root ne devrait jamais utiliser de modelines et vous devriez garder votre copie de Vim à jour.

Le véritable avantage pour les modelines est qu'elles sont par fichier. La plupart des personnes de Perl sont quatre espaces comme personnes de retrait, mais je suis une personne de tabulation de huit caractères. Lorsque je travaille avec le code d'autres personnes, j'utilise une modeline qui reflète leur utilisation. Le reste du temps, j'utilise le mien.

Questions connexes