Tüm bunları kesinlikle tek bir kopyala / yapıştır ile yapabilirsiniz (blok modu seçimini kullanarak), ancak tahminimce bu istediğiniz şey değil.
Bunu sadece Ex komutlarıyla yapmak istiyorsanız
:5,8del | let l=split(@") | 1,4s/$/\=remove(l,0)/
dönüşecek
work it
make it
do it
makes us
harder
better
faster
stronger
~
içine
work it harder
make it better
do it faster
makes us stronger
~
GÜNCELLEME: Bu çok upvotes ile cevap daha kapsamlı bir açıklamayı hak ediyor.
Vim'de, |birden çok Ex komutunu zincirlemek için dikey çizgi karakterini ( ) kullanabilirsiniz, böylece yukarıdakine eşdeğerdir
:5,8del
:let l=split(@")
:1,4s/$/\=remove(l,0)/
Birçok Ex komutları bir önek argüman olarak çizgilerin bir dizi kabul - Yukarıdaki durumda 5,8önce delve 1,4daha önce s///belirttiğiniz komutları üzerinde faaliyet gösterdikleri çizgiler.
delverilen satırları siler. Bir kayıt argümanı alabilir, ancak biri verilmediğinde, @"normal modda silme gibi satırları isimsiz yazmacıya atar . let l=split(@")daha sonra, varsayılan sınırlayıcı: boşluk kullanarak silinen satırları bir listeye böler. Silinen satırlarda boşluk bulunan girdide düzgün çalışmak için, örneğin:
more than
hour
our
never
ever
after
work is
over
~
iki liste elemanları içine olmaktan bölünmesini "eseridir" önlemek için, farklı bir sınırlayıcı belirtmek gerekir: let l=split(@","\n").
Son olarak, ikamede s/$/\=remove(l,0)/, her satırın ( $) sonunu ifadenin değeri ile değiştiririz remove(l,0). remove(l,0)listeyi değiştirir, lilk öğesini siler ve döndürür. Bu, silinen satırları okuduğumuz sıraya göre değiştirmemizi sağlar. Bunun yerine, silinen satırları ters sırayla kullanarak değiştirebiliriz remove(l,-1).
xile katılmak isterx+2misin?