web-dev-qa-db-fra.com

Comment permuter deux lignes dans vim?

J'ai ceci:

pick 887b66f add 222 Dziewiecsil to flowers new title
pick dc331cb new name of beginning commit

Et je veux obtenir ceci:

pick dc331cb new name of beginning commit
pick 887b66f add 222 Dziewiecsil to flowers new title

Existe-t-il un moyen de le faire rapidement en utilisant des raccourcis clavier?

69

Pour échanger la ligne actuelle avec la suivante, tapez ddp en mode commande.

  • dd - supprimer la ligne (en fait appelée couper dans d'autres éditeurs) et l'enregistrer dans le registre
  • p - coller la ligne du registre
114
Sven Marnach

dd supprime la ligne actuelle, vous pouvez ensuite coller la ligne supprimée à l'aide de p. Il existe une autre façon d'utiliser m. Avec m, vous pouvez déplacer les lignes, c'est-à-dire.

:m 1 déplacera la ligne actuelle après la ligne 1

:m 0 déplacera la ligne actuelle en haut

:m $ déplacera la ligne actuelle vers le bas

Dans votre exemple, placez le curseur sur la première ligne et tapez :m $

Plus d'informations: http://vim.wikia.com/wiki/Moving_lines_up_or_down

38
Mr. Eigenbart

Malgré le fait que la question est assez ancienne et marquée comme répondue, je voudrais étendre la réponse en disant que vous pouvez utiliser les commandes en mode normal, qui ont été fournies par Sven Marnach avec nnoremap ainsi:

:nnoremap <C-Up> <Up>ddp<Up>
:nnoremap <C-Down> ddp

Cela vous permettra de déplacer des lignes avec Ctrl + Up et Ctrl + Down dans votre dossier. Cependant, cela écrasera @" register, qui stocke votre dernière chaîne/mot/lettre/etc copié. Ainsi, en ajoutant "(reg) avant les commandes dd et p, nous pouvons résoudre ce problème:

:nnoremap <C-Up> <Up>"add"ap<Up>
:nnoremap <C-Down> "add"ap

Ici, nous ajoutons "a avant de supprimer et coller les commandes pour stocker notre ligne dans @a inscrivez-vous, afin que votre copie par défaut ne soit pas écrasée. Cependant, il peut remplacer le contenu de @a s'inscrire (qui sait, mais vous pouvez l'utiliser pour quelque chose d'important dans votre cas d'utilisation, mais cette étape paranoïaque, vous pouvez l'ignorer si vous le souhaitez), corrigeons cela aussi:

:nnoremap <silent><C-Up> :let save_a=@a<Cr><Up>"add"ap<Up>:let @a=save_a<Cr>
:nnoremap <silent><C-Down> :let save_a=@a<Cr>"add"ap:let @a=save_a<Cr>

(<silent> nécessaire pour empêcher l'écho de nos commandes vers la ligne de message en bas.)

Nous avons maintenant deux mappages qui nous permettent de déplacer des lignes dans le fichier avec des raccourcis clavier. Vous pouvez redéfinir les boutons, j'utilise Alt + j/k, ce qui serait <A-j> et <A-k> pour ces commandes. Cependant, tous les émulateurs de terminaux ne prennent pas en charge les mappages de touches Alt AFAIK.

3
Andrey Orst