2010-12-18 4 views
33

Comment amener vim à placer le curseur dans les accolades en commençant par une nouvelle ligne, c'est-à-dire avec | indiquant la position du curseur:Vim Retrait automatique avec nouvelle ligne

class { 
    | 
} 

en ce moment avec mes réglages, il ne fait que ce

class { 
|} 

je suis arrivé dans mon vimrc set autoindent shiftwidth = 2 tabstop = 2 noexpandtab

Fondamentalement, je veux juste comment un IDE normal indenterait.

mise à jour:

J'ai trouvé comment faire avec inoremap { {<CR>}<Esc>O

Répondre

9

Mettre dans votre .vimrc:

imap <C-Return> <CR><CR><C-o>k<Tab> 

En supposant autoindent et smartindent sont correctement définis, entre accolades tapant Ctrl + Return mettra votre curseur là où vous voulez qu'il soit.

+0

Merci! cela fonctionne: P – Zen

+0

est-il de toute façon à la carte pour entrer simplement tho? Je suis un peu habitué à appuyer simplement sur la touche car j'utilise éclipse pendant tout ce temps. – Zen

+0

ou est-il de toute façon intégrer cela dans un fichier indent pour une langue particulière? – Zen

10

autoindent fait référence à elle portant sur le niveau de retrait actuel sur les lignes suivantes. Pour le mettre en retrait selon la syntaxe, vous devez également spécifier un indicateur comme smartindent ou cindent.

+0

l'empreinte est pas un prob, je veux juste une nouvelle ligne insérée automatiquement quand je frappe entrer avec l'indentation correcte – Zen

+0

Je suis confus. Êtes-vous en dehors du mode d'insertion?Si vous appuyez sur 'i' puis' Return', obtenez-vous le comportement que vous voulez? –

+0

Oui, je suis en mode insertion, ce que je veux, c'est quand j'appuie sur entrer après {je veux que vim me mette sur une nouvelle ligne dans la fermeture}, essentiellement le premier bloc de ma question. – Zen

21

J'ai trouvé que delimitMate fait exactement ce que vous décrivez et plus (c'est-à-dire en insérant automatiquement la fin }). Notez que vous devez indiquer à delimitMate d'étendre les retours chariot en ajoutant let delimitMate_expand_cr=1 à votre configuration.

De mon observation, c'est exactement le comportement trouvé dans TextMate et SublimeText.

+0

FYI pour les utilisateurs de delimitMate + neocomplcache: Si vous utilisez la configuration par défaut neocomplcache .vimrc, vous devrez ajuster le mappage pour prendre en charge les deux plugins. Plus d'infos [ici] (https://github.com/Raimondi/delimitMate/issues/111). Mon .vimrc a maintenant 'imap pumvisible()? neocomplcache # smart_close_popup(): ' delimitMateCR'' et les deux plugins fonctionnent comme je les veux – bknoles

+4

Pour 'delimitMate'' expand_cr_1' n'a pas fonctionné récemment. Au lieu de cela, vous pouvez utiliser 'imap pumvisible()? "\ ": " delimitMateCR" '. –

17

J'ai Ubuntu 12.04 et je n'ai pas trouvé de fichier vimrc dans le répertoire personnel. Le fichier global vimrc était dans /etc/vim/vimrc.
Il n'y avait presque rien dans ce fichier. Donc, pour moi, il a travaillé à ajouter ces 3 lignes à la fin de /etc/vim/vimrc

set autoindent 
set cindent 
inoremap { {<CR>}<up><end><CR> 

Lorsque vous taperez { la prochaine fois il sera modifié par la combinaison {, Entrée, }, haut, fin, Entrée. cindent et autoindent ajoutera la quantité requise de Tab.
P.S. Je ne suis pas bon dans le réglage de vim donc certaines explications peuvent ne pas être aussi précises. C'est comme ça que je pense que ça fonctionne.

+0

J'ai ajouté un "" à la fin de la dernière ligne pour lui faire indenter la ligne médiane d'un pas. C'est à dire. inoremap {{} Skurpi

0

Au fond du dossier, j'utilise:

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

Par exemple Dockerfile:

FROM centos-7 
RUN ... 
CMD ... 

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

Si vous voulez garder l'empreinte uniquement, utilisez # vim: st ai si

Questions connexes