\ ra 줄 바꿈이 Vim의 이유는 무엇입니까?


253

질문 에서 Vim에서 개행 문자를 바꾸는 방법은 무엇입니까? . 다음과 같이 줄 바꿈으로 텍스트를 바꿀 때는 \ r을 사용해야합니다.

:%s/%/\r/g

그러나 문자의 줄 끝과 줄 바꿈을 바꿀 때 다음과 같이 할 수 있습니다.

:%s/\n/%/g 

매뉴얼의 어떤 부분이 이러한 행동을 문서화하고 그 이유는 무엇입니까?


1
%검색 및 교체시 무엇을 위한 것입니까?
qed

7
@qed : 기본적으로 :s현재 행에만 대체를 적용합니다. :%s전체 파일을 처리합니다. .
c24w

3
+ c24w 슬래시 사이의 '%', 첫 번째 예 '%'는 검색 위치에 있고 두 번째 예에서는 바꾸기 위치에 있지만 @qed는 질문에 대답합니다. 의 문자 그대로 일치합니다.
RastaJedi

답변:


154

에서 패턴에 정력 문서 :

\r <CR>과 일치

\n 줄 끝과 일치-버퍼 텍스트 대신 문자열에서 일치하는 경우 리터럴 개행 문자가 일치합니다.


41
저에게는 혼란스러운 점은 \ r과 \ n이 사용될 때 검색 패턴과 대체 패턴이 다른 것을 의미한다는 것입니다.
dlamblin

3
@dlamblin 예! 내 답변보기 :)
제한된 속죄

206

에서 http://vim.wikia.com/wiki/Search_and_replace :

검색 할 때

...

\n줄 바꿈, \ris CR(캐리지 리턴 = Ctrl-M= ^M)

교체 할 때

...

\r개행 문자이며 \n널 바이트 ( 0x00)입니다.


6
이 답변이 가장 도움이되었습니다. 또한 자세한 내용은 :h :s%, 특히 마지막 단락을 참조하십시오. (경유 :h :s)
dipnlik

113

이것에 대한 또 다른 측면 \0은 전통적으로 NULL 인 s//\0/"전체 일치 패턴"을 의미하는 것으로 받아 들여진다 . (그런데과 중복되어 있고 그 이상입니다 &).

  • 당신은 사용할 수 없습니다 그래서 \0의미로 NULL사용하므로,\n
  • \n을 의미 하는 데 사용할 수 \n없으므로를 사용하십시오 \r.
  • 그래서 당신은 \r의미를 사용할 수는 없지만 \r, 누가 그 문자를 의도적으로 추가하고 싶은지 모르겠습니다.

—☈


1
좋은 지적! 따라서 이것은 \ 0 주위의 핵입니다-0 번째 중첩 그룹에 대한 역 참조-전체 정규 표현식. 이것은 매우 좋은 대답이지만, 대신에 \ r을 사용할 수 없다는 것을 실망하게 만듭니다.
Tomasz Gandor

3
대답은 Vim 문서에 있습니다. 일반적인 백 슬래시로 \ ^ M 또는 \ <CR>을 이스케이프하면됩니다. 좋은. -----이 지점에서 <CR>을 두 줄로 나누기 (<CR>을 CTRL-V <Enter>로 입력) s <CR> \ r idem -------- s / \ r \ < CR> 캐리지 리턴 (CTRL-M) 삽입 (<CR>을 CTRL-V <Enter>로 입력) s / \ <CR>
Tomasz Gandor

16
"또 다른 측면"? 당신은 너무 겸손합니다! 정확하게 발생하는 이유를 설명 하면 해결 방법 을 말하는 모든 사람들에게 탁월한 해답이됩니다 . +1
underscore_d

이것은 검색 및 대체 패턴에서 다른 의미를 갖는 이유에 대한 정직한 정말 통찰력 \n입니다. 환상적인 답변.
ZeroKnight

47

:help NL-used-for-Nul

기술적 세부 사항 :

<Nul>파일의 문자는 <NL>메모리 와 같이 저장됩니다 . 디스플레이에서 " ^@" 로 표시됩니다 . 파일을 읽고 쓸 때 번역이 수행됩니다. <Nul>검색 패턴과 a 를 일치 시키려면 CTRL- @ 또는 " CTRL-V 000"을 입력하면 됩니다. 이것은 아마도 당신이 기대하는 것입니다. 내부적으로 문자는 <NL>검색 패턴에서 로 대체됩니다 . CTRL-V 를 입력하면 CTRL- J 도 a를 삽입 하여 파일에서 <NL>a <Nul>를 검색 합니다. {Vi는 <Nul>파일의 문자를 전혀 처리 할 수 ​​없습니다 }



10

우선, :h :s"변경"에 대한 문서의 "4.2 대체"섹션을 보려면여십시오. 명령이 수락하는 내용은 다음과 같습니다.

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

에 대한 설명을 확인 pattern하고string

에 대한 {pattern}참조 |pattern|.
{string}리터럴 문자열이거나
특별한 것이 될 수 있습니다 . 참조하십시오 |sub-replace-special|.

이제 검색 패턴과 대체 패턴이 다른 규칙을 따릅니다. 링크를 |pattern|따라 가면 Vim에서 사용되는 전체 정규 표현식 패턴을 설명하는 섹션으로 이동합니다.

한편, |sub-replace-special|"4.2 대체"의 하위 섹션으로 이동합니다. 여기에는 \r줄 바꿈 / 분할을 위한 대체 패턴이 포함되어 있습니다 .

(본 매뉴얼의 바로 가기는입니다 :h :s%)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.