vim
편집기에서 명령 모드를 사용하여 개행 문자( \n
)를 두 개의 개행 문자( )로 바꾸고 싶습니다 .\n\n
vim
입력 파일 내용:
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
이상하게도 \n
vim에서는대안줄 바꿈을 의미하는 것이 아니라 비어 있음을 의미합니다. ASCII nul은 ^@
( Ctrl+ @)입니다.
역사적으로 vi는 ^M
( Ctrl+ M)를 줄바꿈 문자인 줄 종결자로 대체했습니다. \r
vim 과 동일하도록 C 언어와 같은 확장이 vim에 추가되었지만 ^M
개발자는 \n
다음에서 Mean을 null로 설정하기 로 결정했습니다.바꾸다텍스트. 이는 용도에 맞지 않습니다.찾다, 개행 문자를 찾으십시오.
추가 자료:
답변2
1개의 개행 문자를 2개의 개행 문자로 바꾸려면 다음을 수행하십시오.
:%s/\n/\r\r/g
\n
- 검색 시 줄 바꿈, 교체 시 비어 있음
\r
- 교체중인 개행 문자
대답은 질문에 있습니다. 저자는 제목에서 "어떻게"를 묻고 내용에서 "왜"를 묻습니다. 사람들은 실제로 질문을 받을 것이라고 생각하지 않을 때 "어떻게"에 대한 답변을 찾기 위해 이 페이지를 방문합니다. 그것을 알아내는 데 시간이 걸렸습니다.
답변3
이 시도:
%s/$/^V^M/
어디에 + ^V
이고 + 입니다 .CtrlV^M
CtrlM
- 입력하면 문자
^V
가 인쇄되고 그 위에^
문자 가 인쇄 Backspace되며 입력하면 다음^M
과 같이 나타납니다.^M
- + 는 표준 tty Ctrl입니다V말 그대로 다음문자 - 명령을 실행하여
stty -a
tty의 특수 문자를 표시합니다.
답변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
이를 두 개의 개행/캐리지 리턴 문자( )로 바꿉니다.