문자열을 검색한 다음 파일의 모든 줄 시작 부분에 줄 바꿈을 삽입하려면 어떻게 해야 합니까?

문자열을 검색한 다음 파일의 모든 줄 시작 부분에 줄 바꿈을 삽입하려면 어떻게 해야 합니까?

---줄 시작 부분에 나타나는 문자열을 전체 파일에서 검색하고 싶습니다. 그런 다음 해당 문자열의 각 인스턴스 앞에 개행 문자를 삽입하고 싶습니다.

.vimrc파일에 다음 명령을 추가했습니다.

let @p=":1,$s/^---/^M---/"

실행할 때 개행 문자가 삽입되지 않습니다. 대신 처음부터 시작하는 모든 것을 무시하므로 ^M이를 ---빈 문자열로 대체하고 처음에 포함된 대시 3개를 각 줄에서 제거합니다.

@p 명령에 어떤 문제가 있나요? 이 캐릭터를 인식하지 못하는 것 같습니다 ^M. 검색 및 바꾸기 명령에서 이것이 허용되지 않습니까? 그런데 :파일 하단의 프롬프트에 똑같은 명령을 입력하면 수동으로 이 작업을 수행할 수 있습니다 .

나는 또한 다음을 시도했습니다.

let @p=":1,$s/^---/^M^[---/"

(개행 다음에 이스케이프 추가) - 이것은 나에게 똑같은 결과를 제공합니다. 탈출과 나머지 교체 부품을 무시하는 것처럼 보입니다.

누군가 나에게 올바른 방법을 말해 줄 수 있습니까? 나는 동일한 명령 세트로 많은 파일을 편집하고(그리고 여러 매크로를 포함하며 이 매크로를 제외하고는 모두 잘 작동함) vimrc 파일에 이러한 명령을 보관하고 싶습니다. 그래서 매번 다시 만들고 싶지는 않습니다. 동일한 매크로를 사용하여 새 파일을 열 때.

감사합니다!

답변1

스크립트의 문자는 입력한 대로 나타납니다. 따라서 ^MEnter를 누르는 즉시 실행됩니다. 그래서 당신은 작성해야합니다

let @p=":1,$s/^---/^V^M---/^M"

매크로를 수동으로 기록할 때 입력하는 내용이기 때문입니다. 물론, 이것을 작성하려면 , ctrlV그 다음 ctrlV, 그 다음, ctrlV마지막으로 를 입력해야 합니다 ctrlM.

^M또한 명령을 실제로 실행하려면 버퍼에 넣는 것이 아니라 마지막에 final을 추가해야 합니다 .

그런데, 패턴을 반복하는 대신 단순화 1,$하고 %사용할 수 있으므로 다음과 같이 쓸 수 있습니다.&

let @p=":%s/^---/^V^M&/^M"

관련 정보