2016-04-14 1 views
0

S'il vous plaît noter que c'est PAS liés à :paste/:nopaste et le presse-papiers. Je parle de copier et coller entièrement dans vim (d, y, p).Comment puis-je supprimer/coller coller dans vim et l'indenter correctement? (ne parle pas de: pâte)

Il est courant de copier et coller un bloc de code d'un bloc externe dans un bloc interne. Malheureusement, l'indentation est toujours au niveau du bloc extérieur et je dois l'indenter par la suite.

Ce que je veux faire est d'aller de:

function foo() { 
} 
var bar; 
var bazz; 

à

function foo() { 
    var bar; 
    var bazz; 
} 

En vim ce que je fais normalement est:

1) vont à la ligne

2) passer en mode visuel

3) mettre en évidence les lignes

4) dd pour supprimer les lignes

5) se déplacent le curseur vers le haut

6) P pour coller

7) passer en mode visuel

8) mettre en évidence les lignes

9) >> pour indenter les lignes

Je souhaite que le retrait se fasse automatiquement à l'emplacement correct. Ce serait un flux de travail beaucoup plus fluide si je n'avais pas besoin de re-mettre en surbrillance les lignes, puis les indenter manuellement. En d'autres termes, éliminez les étapes 7-9.

Quelqu'un sait-il comment faire?

Répondre

1

Vous pouvez facilement en faire un mappage de touches qui effectue un retrait automatique dans le cadre du collage.

Par exemple,

nnoremap gp p`[v`]= 

Répartition:

p to paste text 
`[v`] to selecte Pasted text 
= to autoindent selected text 
1

je suis tombé sur ce plugin.

https://github.com/sickill/vim-pasta

On dirait qu'il fait la même chose que ronakg mentionné ci-dessus avec des fonctionnalités supplémentaires.

+0

C'est un bon plugin. Je l'utilise aussi. Mais c'est bon de comprendre comment ça fonctionne. À votre santé. – ronakg