vim에서 두 줄을 동시에 일치시키는 방법

vim에서 두 줄을 동시에 일치시키는 방법

탭으로 구분된 형식의 레코드가 두 줄로 포함된 파일이 있는데 vim 편집기 패턴 일치를 사용하여 탭으로 구분된 값이 있는 레코드를 한 줄로 정렬하고 싶습니다.

전임자.

Abc     PQR     XYZ     NMW
    XYX     PQR     LMW
PLX     PXQ     LPN     PWF
    XYQ     PLP     PMQ    LWP

레코드의 첫 번째 행에 레코드의 두 번째 행을 추가하고 싶습니다. 내가 원하는 출력 형식은 다음과 같습니다.

Abc     PQR     XYZ     NMW    XYX     PQR     LMW
PLX     PXQ     LPN     PWF    XYQ     PLP     PMQ     LWP

내 문제를 해결하기 위해 다음 명령을 사용해 보았습니다.

:%s/\n(\w\+.*)/\t\1/cgi

이렇게 하면 데이터의 각 줄이 첫 번째 줄을 제외하고 이전 탭 문자로 대체됩니다.

이 문제를 해결하기 위해 vim 패턴 일치 및 교체를 어떻게 사용할 수 있습니까?

답변1

어때요?

:%s/\n\s\+/\t/gc

이렇게 하면 공백이 뒤따르는 개행 문자를 찾아 모두 탭으로 대체하여 행을 결합합니다.

답변2

첫 번째 줄은 항상 문자로 시작하고 두 번째 줄은 항상 탭으로 시작한다는 것을 알고 있다면 가장 쉬운 방법은 아마도 :g(정규식과 일치하는 모든 줄에서 ex 명령 실행) 및 j!(공백을 제거하지 않고 결합)을 사용하는 것입니다. ). help :g그리고 를 보세요 help :j. 이것을 결합하면 얻을 수 있습니다.

:%g/^\w/j!

답변3

다음을 사용하여 쉽게 수행할 수 있습니다 paste.

paste -sd'\0\n' file

존재하다 vim:

:%!paste -sd'\0\n' -

관련 정보