왜 '\r'('\n'은 아님)이 'vim'의 개행 문자를 대체합니까?

왜 '\r'('\n'은 아님)이 'vim'의 개행 문자를 대체합니까?

vim편집기에서 명령 모드를 사용하여 개행 문자( \n)를 두 개의 개행 문자( )로 바꾸고 싶습니다 .\n\nvim

입력 파일 내용:

This is my first line.
This is second line.
  • 내가 시도한 명령:
    :%s/\n/\n\n/g
    
    그러나 아래와 같이 문자열을 원하지 않는 문자로 바꿉니다.
    This is my first line.^@^@This is second line.^@^@
    
  • 그런 다음 다음 명령을 시도했습니다.
    :%s/\n/\r\r/g
    
    잘 작동합니다.

두 번째 명령이 제대로 작동하는 이유를 설명해 주실 수 있나요?

답변1

이상하게도 \nvim에서는대안줄 바꿈을 의미하는 것이 아니라 비어 있음을 의미합니다. ASCII nul은 ^@( Ctrl+ @)입니다.

역사적으로 vi는 ^M( Ctrl+ M)를 줄바꿈 문자인 줄 종결자로 대체했습니다. \rvim 과 동일하도록 C 언어와 같은 확장이 vim에 추가되었지만 ^M개발자는 \n다음에서 Mean을 null로 설정하기 로 결정했습니다.바꾸다텍스트. 이는 용도에 맞지 않습니다.찾다, 개행 문자를 찾으십시오.

추가 자료:

답변2

1개의 개행 문자를 2개의 개행 문자로 바꾸려면 다음을 수행하십시오. :%s/\n/\r\r/g

\n- 검색 시 줄 바꿈, 교체 시 비어 있음

\r- 교체중인 개행 문자

대답은 질문에 있습니다. 저자는 제목에서 "어떻게"를 묻고 내용에서 "왜"를 묻습니다. 사람들은 실제로 질문을 받을 것이라고 생각하지 않을 때 "어떻게"에 대한 답변을 찾기 위해 이 페이지를 방문합니다. 그것을 알아내는 데 시간이 걸렸습니다.

답변3

이 시도:

%s/$/^V^M/

어디에 + ^V이고 + 입니다 .​CtrlV^MCtrlM

  • 입력하면 문자 ^V가 인쇄되고 그 위에 ^문자 가 인쇄 Backspace되며 입력하면 다음 ^M과 같이 나타납니다.^M
  • + 는 표준 tty Ctrl입니다V말 그대로 다음문자 - 명령을 실행하여 stty -atty의 특수 문자를 표시합니다.

답변4

Neovim( nvim) 및 버전으로 Vim테스트하기

NVIM v0.3.0
VIM - Vi IMproved 8.1

줄 바꿈을 제거하십시오:

cell
allele
rs2981578
fgfr2

여기에서 \n개행 문자를 일치시킵니다(끼워 넣다그러나 개행 문자를 사용하십시오 \r):

:'<,'>s/\n/|/g

cell|allele|rs2981578|fgfr2

개행 문자 추가:

아니요:

cell|allele|rs2981578|fgfr2

:'<,'>s/\n/|/g

cell^@allele^@rs2981578^@fgfr2

^@LF의 발음 구별 기호입니다(라인 피드, 참조). http://vimhelp.appspot.com/digraph.txt.html#digraphs-default)

예:

cell|allele|rs2981578|fgfr2

:'<,'>s/|/\r/g

cell
allele
rs2981578
fgfr2

OP의 문제( \n하나를 두 개로 바꾸는 방법 \n\n)를 해결하려면 다른 하나를 추가하세요 \r.

cell
allele
rs2981578
fgfr2

:'<,'>s/\n/\r\r/g

cell

allele

rs2981578

fgfr2

...즉, 원래 개행 문자( \n) 를 일치시키고 \r\r이를 두 개의 개행/캐리지 리턴 문자( )로 바꿉니다.

관련 정보