web-dev-qa-db-fra.com

Vim Auto Indent avec nouvelle ligne

Comment puis-je faire en sorte que vim place le curseur entre les accolades à partir d'une nouvelle ligne, c'est-à-dire avec | indiquant la position du curseur:

class {
  |
}

en ce moment avec mes paramètres, il ne fait que cela

class {
|}

Je l'ai eu dans mon fichier .vimrc Set autoindent shiftwidth = 2 tabstop = 2 noexpandtab

En gros, je veux juste savoir comment un IDE normal l'indenterait.

mettre à jour:

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

37
Zen

Mettez ceci dans votre .vimrc:

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

En supposant que autoindent et smartindent soient définis correctement, taper Ctrl + Return entre accolades placera votre curseur à l'endroit souhaité.

12
romainl

J'ai trouvé que delimitMate fait exactement ce que vous décrivez et plus (c'est-à-dire, l'insertion automatique du } final) Notez que vous devez indiquer à delimitMate de développer les retours chariot en ajoutant let delimitMate_expand_cr=1 à votre configuration.

À mon avis, il s’agit exactement du comportement observé dans TextMate et SublimeText.

22
trkoch

J'ai Ubuntu 12.04 et je n’ai trouvé aucun fichier vimrc dans le répertoire personnel. Le fichier global vimrc était en /etc/vim/vimrc.
Il n'y avait presque rien dans ce dossier. Donc pour moi cela a fonctionné d'ajouter ces 3 lignes à la fin de /etc/vim/vimrc

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

Lors de la prochaine saisie de {, il sera modifié par la combinaison {, entrée, }, haut, fin, entrée. cindent et autoindent ajouteront la quantité requise de .
P.S. Je ne suis pas doué pour régler vim, donc certaines explications peuvent ne pas être aussi précises. C'est comme ça que je pense que ça marche.

19
Ndmitry

autoindent fait référence au dépassement du niveau actuel indentation sur les lignes suivantes. Pour le mettre en retrait selon la syntaxe, vous devez également spécifier un indicateur du type smartindent ou cindent.

10

Au bas du fichier, 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 conserver uniquement l'indentation, utilisez # vim: st ai si

0
Eduardo Cuomo
inoremap <expr> <CR> InsertMapForEnter()
function! InsertMapForEnter()
    if pumvisible()
        return "\<C-y>"
    elseif strcharpart(getline('.'),getpos('.')[2]-1,1) == '}'
        return "\<CR>\<Esc>O"
    else
        return "\<CR>"
    endif
endfunction

Le code ci-dessus vérifie d’abord si vous complétez le code, sinon il indenterait le {|} lorsque vous tapez Enter.

0
Voldikss