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
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é.
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.
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.
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
.
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
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
.