Vim에서 특정 텍스트 패턴 사이의 선을 연결하십시오


8

다음과 같은 텍스트 파일이 있습니다.

A.
text
text
text


A.
more text

more text

A.
more text

"마커"사이의 모든 줄을 연결하여 A.다음과 같이 표시 하려고합니다.

A.texttexttext
A.more textmore text
A.more text

Vim에서 어떻게해야합니까?

답변:


4
:%s/\n\(\(A\.$\)\@!.*\)/\1/

패턴 일치를 대체하십시오.

  1. 개행
  2. 를 포함하는 그룹

    1. 하지 문자열은 A.바로 다음 줄 끝 다음에
    2. 줄 끝까지의 모든 문자

와:

  • 시작 줄 바꿈을 제외한 모든 항목 (예 : 위 그룹)

전 세계적으로이 작업을 수행하십시오.


1
감사. 나는 그것이 어떻게 작동하는지 전혀 모른다. 그러나 그것은 보인다! 나는 그것을 신중하게 해부해야 할 것이다. 또한 모든 줄을 연결 한 다음 "A"에 새 줄을 삽입하여 해결 방법을 찾았습니다.
vim noob

@vimnoob : :help \@!해당 부분에 대한 자세한 내용 은 Vim을 참조하십시오 . 그렇지 않으면 내 설명과 함께 희망이 있습니다. 접근 방식의 문제점 A.은 텍스트에서 " "가 분리 된 마커 행이 아니라 텍스트에서 발생하면 원래 마커 인 것처럼 분할된다는 것입니다. 실제로는 문제가되지 않을 수도 있지만 ( "실제"파일의 모양을 모르겠습니다.) 일반적으로이를 모르는 경우 원치 않는 동작이 발생할 수 있습니다.
Daniel Andersson

@ vimnoob : 내 대답을 다시 읽었으며 :%s///구문에 익숙하지 않은 경우 Vim의 "검색 및 바꾸기"구문입니다. :명령을 시작하고 %전체 버퍼를 범위로 지정하고 s대체를 시작합니다. /패턴 구분 기호입니다 (다른 문자를 사용할 수 있지만 /"표준"임). 첫 번째 /는 검색 패턴을 시작하고 두 번째는 교체 패턴을 시작하고 세 번째 는 검색 패턴을 종료합니다. 대소 문자 구분을 지정하기 위해 후행 수정자를 사용할 수 있습니다 \1. 검색 패턴에서 파악 된 그룹을 나타냅니다. :%s/foo/bar/대체 foobar파일입니다.
Daniel Andersson

도와 주셔서 정말로 고맙습니다. 나는 단지이 \ @를 연구해야한다! 기본 검색 바꾸기 및 기본 정규 표현식에 익숙합니다.
vim noob

1
@Reman : 내가 생각하는 가장 간단한 방법은 다음과 같은 전역 패턴 일치를 실행하는 것 :%s/^A\.//입니다. 대답의 메소드는 ^A\.패턴 자체를 캡처하지 않고 (그들의 부재가 아닌) 명백한 방식으로 해당 문자열을 수정할 수 없습니다.
다니엘 앤더슨

7

이것은 또한 작동합니다 (첫 번째 줄이로 시작할 때 A.)

:v/^A/-1j!

작동합니다! 좋은. +1
ZaSter

글로벌 안티 패턴 매치 (v) 이후, 예, 진실하고 두 가지 트릭이 있습니다 : 'j'와 '!' 공백을 추가하지 않고 결합하십시오. 감사합니다.
fortboise

@Miro 와우! 경례합니다 왜 작동하는지 설명 할 수 있다면 슈퍼! .. 또한 탭 문자가있는 줄을 연결해야했습니다 ... 그래서 내가 한 것은 발행하기 전에 모든 줄 끝에 / $ / \ t / g 탭 문자를 추가하는 것이 었습니다 위의 명령 .. 더 나은 방법
ihightower
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.