Comment échanger 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 

Est-il possible de le faire rapidement en utilisant les raccourcis clavier?

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

  • dd – supprime la ligne (en fait appelée cut in other editors) et enregistre-la dans le registre
  • p – coller une ligne depuis le tampon

dd supprime la ligne en cours, vous pouvez alors coller la ligne supprimée en utilisant p . Il y a une autre manière d’utiliser m . Avec m vous pouvez déplacer des lignes, c.-à-d.

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

:m 0 déplace la ligne en cours vers le haut

:m $ déplace la ligne en cours vers le bas

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

Plus d’infos: http://vim.wikia.com/wiki/Moving_lines_up_or_down

Bien que la question soit assez ancienne et marquée comme une réponse, j’aimerais étendre la réponse en disant que vous pouvez utiliser des commandes en mode normal, fournies par Sven Marnach avec nnoremap comme nnoremap :

 :nnoremap  ddp :nnoremap  ddp 

Cela vous permettra de déplacer des lignes avec Ctrl + Haut et Ctrl + Bas dans votre fichier. Cependant, cela écrasera @" register, qui stocke votre dernière chaîne / mot / lettre / etc copiée. Donc, en ajoutant” (reg) avant les commandes dd et p nous pouvons corriger ceci:

 :nnoremap  "add"ap :nnoremap  "add"ap 

Ici, nous ajoutons "a before delete et paste pour stocker notre ligne dans @a register, donc votre registre de copie par défaut ne sera pas écrasé. Cependant, il peut remplacer le contenu de @a register (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  :let save_a=@a"add"ap:let @a=save_a :nnoremap  :let save_a=@a"add"ap:let @a=save_a 

( nécessaire pour éviter que nos commandes ne renvoient la ligne de message au bas de la page.)

Maintenant, nous avons 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 , qui serait et pour ces commandes. Cependant, tous les émulateurs de terminaux ne prennent pas en charge les mappages de touches Alt AFAIK.