Vous pouvez certainement faire tout cela avec un simple copier/coller (à l'aide de bloc-mode de sélection), mais je suppose que c'est pas ce que vous voulez.
Si vous voulez le faire avec Ex - commandes
:5,8del | let l=split(@") | 1,4s/$/\=remove(l,0)/
transformera
work it
make it
do it
makes us
harder
better
faster
stronger
~
en
work it harder
make it better
do it faster
makes us stronger
~
Mise à JOUR: Une réponse avec ce nombre d'upvotes mérite une explication plus approfondie.
Dans Vim, vous pouvez utiliser le caractère pipe (|
) chaîner les commandes Ex, de sorte que le ci-dessus est équivalente à
:5,8del
:let l=split(@")
:1,4s/$/\=remove(l,0)/
De nombreux Ex-commandes accepter une gamme de lignes comme préfixe de l'argument dans le cas ci-dessus l' 5,8
avant l' del
et de la 1,4
avant l' s///
de spécifier les lignes de commandes opérer.
del
supprime les lignes donnée. Il peut prendre un registre argument, mais quand on n'est pas donnée, elle exporte les lignes pour le registre sans nom, @"
, tout comme la suppression en mode normal. let l=split(@")
se sépare ensuite les lignes supprimées dans la liste, en utilisant le délimiteur par défaut: les espaces blancs. Pour travailler correctement sur l'entrée qui avait espaces dans les lignes supprimées, comme:
more than
hour
our
never
ever
after
work is
over
~
nous aurions besoin de spécifier un autre séparateur, pour éviter "le travail est" d'être scindé en deux éléments d'une liste: let l=split(@","\n")
.
Enfin, dans la substitution s/$/\=remove(l,0)/
, nous remplaçons la fin de chaque ligne ($
) avec la valeur de l'expression remove(l,0)
. remove(l,0)
modifie la liste l
, la suppression et le retour de son premier élément. Cela nous permet de remplacer les lignes supprimées dans l'ordre dans lequel nous les lisons. Nous avons pu, au lieu de remplacer les lignes supprimées dans l'ordre inverse en utilisant remove(l,-1)
.