블록 모드 선택을 사용하여 단일 복사 / 붙여 넣기 로이 모든 작업을 수행 할 수는 있지만 원하는 것은 아닙니다.
Ex 명령 만으로이 작업을 수행하려면
:5,8del | let l=split(@") | 1,4s/$/\=remove(l,0)/
변형 될 것이다
work it
make it
do it
makes us
harder
better
faster
stronger
~
으로
work it harder
make it better
do it faster
makes us stronger
~
업데이트 : 이 많은 투표에 대한 답변은보다 철저한 설명이 필요합니다.
Vim에서 파이프 문자 ( |
)를 사용하여 여러 Ex 명령 을 연결할 수 있으므로 위의 내용은
:5,8del
:let l=split(@")
:1,4s/$/\=remove(l,0)/
많은 Ex 명령은 여러 행을 접두사 인수로 받아들입니다. 위의 경우 5,8
before del
및 1,4
before s///
는 명령이 작동하는 행을 지정합니다.
del
주어진 줄을 삭제합니다. 레지스터 인수를 사용할 수 있지만 하나를 지정하지 않으면 @"
일반 모드에서 삭제하는 것처럼 행을 이름이 지정되지 않은 레지스터에 덤프합니다 . let l=split(@")
그런 다음 기본 구분 기호 인 공백을 사용하여 삭제 된 행을 목록으로 분할합니다. 삭제 된 줄에 공백이있는 입력에서 올바르게 작동하려면 다음과 같이하십시오.
more than
hour
our
never
ever
after
work is
over
~
"work is"가 두 개의 목록 요소로 분리되지 않도록하려면 다른 구분 기호를 지정해야합니다 let l=split(@","\n")
.
마지막으로, 치환 s/$/\=remove(l,0)/
에서 각 줄의 끝 ( $
)을 expression의 값으로 바꿉니다 remove(l,0)
. remove(l,0)
목록을 변경하여 l
첫 번째 요소를 삭제하고 반환합니다. 이렇게하면 삭제 된 줄을 읽은 순서대로 바꿀 수 있습니다. 대신을 사용하여 삭제 된 줄을 역순으로 바꿀 수 remove(l,-1)
있습니다.
x
을 결합 하고 싶x+2
습니까?