Vim에서 두 번째 줄마다 합류하는 방법?


27

나는 많은 (~ 1000) 줄에 합류하고 싶지만 다음 줄과 만 겹칩니다. 손으로 할 수 있었다

Jj

500 번 해봤어요 그러나 하나의 명령 으로이 두 문을 500 번 어떻게 실행할 수 있습니까? 타자

500Jj

다음 500 줄에 합류 한 다음 한 줄 아래 이동합니다.

예:

나는 가지고있다:

a
b
c
d
e
f
g
h

내가 원하는:

a b
c d
e f
g h

편집 : 매핑을 시도했습니다.

:map X Jj
500X

그러나 분명히 매핑 문서를 다시 읽어야합니다. 작동하지 않습니다.

답변:


30

나는 이것을 할 것이다 :

  1. 매크로 'q'기록을 시작하십시오. qqJjq

  2. 매크로 'q'를 500 번 재생하십시오. 500@q

(실제로 'q'라는 매크로가 아니며 'q'라는 이름의 레지스터입니다. 1과 같이 해당 레지스터를 대화식으로 채우는 대신 :let @q = "Jj"2를 수행 한 다음 2를 수행 할 수 있습니다 .)


멋지다, 나에게 매크로를 기억해 주셔서 감사합니다!
Boldewyn

: % 정상 J는 ...이 매크로 솔루션에 비해는 50,000 선에 그것을 실행 (아래 2 위에 솔루션을 참조) 매우 빠르고 쉬웠다
ihightower

@ ihightower 그래서 그 대답을 upvoted 이유입니다. 6 년 전 :)
akira

@akira 매크로는 오늘 다른 목적 으로이 매크로 솔루션이 필요했기 때문에 하루를 절약했습니다.
ihightower

24

파일의 모든 줄에서이 작업을 수행하려면

:%normal J

또는 더 짧게 :

:%norm J

파일의 일부에서만이 작업을 수행하려면 V다른 방법으로 줄을 선택 하거나 범위를 가져옵니다.

:'<,'>global/^/normal J

또는 더 짧게 :

:'<,'>g/^/norm J

Kevin 그는 하나의 파일이 아니라 모든 파일에 대해 두 개의 명령을 실행하려고합니다.
JNK

1
:g답변 사용 OP가 필요합니다.
Luc Hermitte

2
이것은 실제로 두 번째 줄마다 합류합니다. 시도 해봐!
Kevin Panko

global트릭 주셔서 감사합니다 . 그러나 필자의 경우 매크로 기록이 더 쉽고 빠릅니다.
Boldewyn

2
간단히 추측하면-각 줄에서 명령을 순서대로 실행하고 첫 번째 줄을 수행 한 후 두 번째 줄이 사라지고 (첫 번째 줄과 결합 된) 세 번째 줄로 이동해야합니다.
케빈 판코

8

이건 어때?

:g/$/j  

또는

:g/$/j!  

세 줄마다 그룹화

:g/$/j3 

1
이것은 매우 훌륭한 솔루션 Miro입니다. 이상하게도 j3으로 3 열을 만드는 대신 SVR4.0 vi (Solaris에서와 같이)의 후행 번호를 사용하면 4를 만드는 경우에도 표준 vi에서도 사용할 수 있다는 점이 더 좋습니다. 3 줄마다 그룹화하기위한 j2)
JohnGH


-1

Vim의 사용자는 아니지만 온라인 문서를 확인하십시오.

500(Jj) 

괄호 안의 내용을 단위로 구문 분석하기 때문에 작동 할 수 있습니다.


흠, 시도해 주셔서 감사하지만 내 버전에서 Vim은 괄호를 무시합니다. 이 구문을 찾은 링크를 알려주시겠습니까?
Boldewyn

1
vimdoc.sourceforge.net/htmldoc/syntax.html- 도움이되지 않아 죄송합니다!
JNK

실제로이 링크를 확인하십시오 : vim.org/scripts/script.php?script_id=2136 그 후에 당신이 무엇을하는지 확인하십시오.
JNK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.