,
현재 파일의 각 줄을 새 줄로 바꾸려고 합니다.
:%s/,/\n/g
그러나 ^@
실제 줄 바꿈 대신에 보이는 것을 삽입합니다 . 파일이 DOS 모드에 있지 않습니다.
어떻게해야합니까?
나처럼 궁금한 점이 있다면, 왜 \ ra 개행 문자가 Vim입니까? 게다가.
,
현재 파일의 각 줄을 새 줄로 바꾸려고 합니다.
:%s/,/\n/g
그러나 ^@
실제 줄 바꿈 대신에 보이는 것을 삽입합니다 . 파일이 DOS 모드에 있지 않습니다.
어떻게해야합니까?
나처럼 궁금한 점이 있다면, 왜 \ ra 개행 문자가 Vim입니까? 게다가.
답변:
\r
대신에 사용하십시오 \n
.대체 \n
하여 텍스트에 널 문자를 삽입합니다. 줄 바꿈을 얻으려면을 사용하십시오 \r
. 그러나 개행을 검색 할 때는 여전히을 사용 \n
합니다. 이 비대칭 성은 다음 \n
과 같은 사실 과 \r
약간 다른 사실 때문입니다 .
\n
줄 끝 (줄 바꿈) \r
과 일치하는 반면 캐리지 리턴과 일치합니다. 반면에 대체 \n
에서 널 문자를 \r
삽입하고 개행을 삽입합니다 (보다 정확하게는 입력으로 처리됩니다 <CR>). 다음은 Vim 명령 행 기능을 사용하여이를 설명하기위한 작은 비 대화식 예제입니다. 즉, 다음을 터미널에 복사하여 붙여 넣어 실행할 수 있습니다. xxd
결과 파일의 16 진 덤프를 보여줍니다.
echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a bar.
After:
0000000: 000a 720a ..r.
즉, \n
바이트 0x00을 텍스트에 삽입했습니다. \r
바이트 0x0a를 삽입했습니다.
\r
이와 같이 작동하지 않습니다. 그러나을 Ctrl-V
Enter
입력하는 대신을 누르면 \r
작동합니다.
\r
삽입 <CR>
하고 \n
삽입 널은 어떻게 캐리지 리턴 뭔가를 대체 할 것이다?
요령은 다음과 같습니다.
먼저 Vi (m) 세션을 설정하여 특수 문자 (예 : 줄 바꿈)와 패턴 일치를 허용하십시오. 이 줄을 .vimrc 또는 .exrc 파일에 넣을 가치가 있습니다.
:set magic
다음으로
:s/,/,^M/g
^M
문자 를 얻으려면 Ctrl+를 입력 하고을 V누르십시오 Enter. Windows에서 Ctrl+ Q,을 수행하십시오 Enter. 내가 이것을 기억할 수있는 유일한 방법은 그들이 이해하는 정도를 기억하는 것입니다.
A : 줄 바꿈을 나타내는 데 사용하는 최악의 제어 문자는 무엇입니까?
B : 어느
q
(그것은 일반적 의미하기 때문에 "종료") 또는v
그렇게 쉽게 입력 할 것이기 때문에 Ctrl+ C실수로하고 편집기를 죽인다.A : 그렇게하세요.
:set magic
(~ / _vimrc에 있지 않음) 또는가 필요하지 않습니다 ctrl-q
. 간단한 ctrl-v
뒤에 enter 만 있으면 ^M
문자가 잘 만들어집니다 .
Ctrl-C
표준 모드로 되돌릴 수는 있지만 실제로 편집기를 종료하지는 않습니다. Ctrl-V
의미 그대로, Ctrl-Q
누군가 $VIMRUNTIME/mswin.vim
구성 파일 을로드하는 실수를했다는 의미입니다 . mswin이 필요하지 않습니다. 대신 자신의 vimrc를 사용하십시오.
sed -n l
지금까지했었다. Ctrl-v
vim 에서도 마찬가지 입니다.
구문에서 s/foo/bar
, \r
및 \n
문맥에 따라 다른 의미를 갖는다.
의 경우 foo
:
\ n = 줄 바꿈 (Linux / Mac의 경우 LF, Windows의 경우 CR + LF)
\ r = 캐리지 리턴 (CR)
의 경우 bar
:
\ r =는 줄 바꿈입니다.
\ n = null 바이트입니다.
NUL
= 0x00 = 0 = Ctrl+ @
LF
= 0x0A = 10 = Ctrl+ J
CR
= 0x0D = 13 = Ctrl+M
다음은 ASCII 제어 문자 목록입니다 . Ctrl+ V, Ctrl+ 를 통해 Vim에 삽입하십시오 ---key---.
Bash 나 다른 유닉스 / 리눅스 셸에서 Ctrl+ 만 입력하십시오 ---key---.
Bash에서 Ctrl+ M를 사용해보십시오 . 그것은 타격과 동일합니다 Enter쉘이 무엇을 의미하는지 알게 리눅스 시스템은 라인의 경계 설정을위한 라인 피드를 사용하더라도.
bash에 리터럴을 삽입하려면 Ctrl+ V를 앞에 붙이십시오 .
배쉬에서보십시오 :
echo ^[[33;1mcolored.^[[0mnot colored.
이것은 ANSI 이스케이프 시퀀스를 사용 합니다 . 두 삽입 ^[
'을 통해에요 Ctrl+ V, Esc.
Ctrl+ V, Ctrl+ M, 시도해 볼 수도 있습니다 Enter.
bash: $'\r': command not found
\r
위에서 기억 하십니까? :>
이 ASCII 제어 문자 목록은 완전한 ASCII 기호 표 와 다릅니다. Ctrl키 (haha) 를 통해 콘솔 / 의사 터미널 / Vim에 삽입 된 제어 문자를 찾을 수 있다는 점입니다.
C 및 대부분의 다른 언어에서는 일반적으로 8 진 코드를 사용하여 이러한 '문자'를 나타냅니다.
이 모든 것이 어디서 나오는지 정말로 알고 싶다면 TTY demystified . 이것은 당신이이 주제에 관해 알게 될 가장 좋은 링크이지만주의하십시오 : 용이 있습니다.
TL; DR
일반적으로 foo
= \n
및 bar
= \r
.
:s/x/^M/g
야합니다. ^M
비아 ctrl-v
다음에을 삽입하십시오 ctrl-m
.
다음을 사용해야합니다.
:%s/,/^M/g
^M
문자 를 얻으려면 Ctrl+ v와을 차례로 누릅니다 Enter.
이것은 내가 생각하는 방식에 가장 적합한 대답이지만 테이블에서 더 좋을 것입니다.
다시 말하면 :
당신은 사용할 필요가 \r
라인 피드 (ASCII 사용하는 0x0A
정규식 교체에, 유닉스 줄 바꿈),하지만 교체 특유 - 일반적으로 사용하는 기대를 계속해야 \n
줄 바꿈과 \r
캐리지 반환.
이는 Vim이 \n
대체 문자로 NIL 문자 (ASCII 0x00
) 를 의미 하기 때문 입니다. \0
대신 NIL \n
이 일반적으로 줄 바꿈에 일반적으로 사용 되도록 해주었을 것으로 예상 했지만 \0
이미 정규식 대체에 의미가 있으므로로 변경되었습니다 \n
. 따라서 다음과 같은에서 개행을 이동하는 상기 예정 \n
에 \r
(이 정규식 패턴 캐리지 리턴 문자, ASCII이다 0x0D
).
캐릭터 | ASCII 코드 | C 표현 | 정규식 경기 | 정규식 교체 ------------------------- + ------------ + ------------- ------- + ------------- + ------------------------ 무 | 0x00 | \ 0 | \ 0 | \엔 줄 바꿈 (Unix 줄 바꿈) | 0x0a | \ n | \ n | \아르 자형 캐리지 리턴 | 0x0d | \ r | \ r | <알 수 없음>
NB : ^M
( Linux의 경우 Ctrl+ V Ctrl+ M)는 다른 사람들이 권고 한 것처럼 캐리지 리턴 대신 정규식 교체에 사용될 때 줄 바꿈을 삽입합니다 (방금 시도했습니다).
또한 Vim은 파일 형식 설정에 따라 파일에 저장할 때 줄 바꿈 문자를 변환하므로 문제를 혼동 할 수 있습니다.
에서 이클립스 의 ^M
문자는 라인에 포함, 당신은 개행 문자로 변환 할 수 있습니다.
:s/\r/\r/g
그러나 대체 해야하는 경우 다음이 작동합니다.
:%s/\n/\r\|\-\r/g
위의 모든 다음 줄은 다음 줄로 바뀐 다음 |-
새 줄로 다시 바뀝니다. 위키 테이블에서 사용됩니다.
텍스트가 다음과 같은 경우 :
line1
line2
line3
로 변경됩니다
line1
|-
line2
|-
line3
전체 파일에 대해 수행 해야하는 경우 명령 줄에서 시도해 볼 수도 있습니다.
sed 's/\\n/\n/g' file > newfile
printf 'foo\\nbar\n' | sed 's/\\n/\n/g'
는 시스템에서 작동하는지 확인합니다. (이 제안에 대한 Freenode의에 #bash의 좋은 사람들에게 감사드립니다.)
나를 위해 일한 대답은 다음과 같습니다. 이 사람으로부터 :
---- quoting vi 편집기를 사용하여 바꾸기에 줄 바꿈 문자를 삽입하십시오.
내가해야 할 일이 있고 기억하지 못하고 찾아야 할 것이 있습니다.
vi에서 검색에 줄 바꾸기 문자를 삽입하고 바꾸려면 다음을 수행하십시오.
:%s/look_for/replace_with^M/g
위의 명령은“look_for”의 모든 인스턴스를“replace_with \ n”(\ n은 개행 문자)으로 바꿉니다.
"^ M"을 얻으려면 키 조합 Ctrl+을 입력 V한 다음 (모든 키 해제) Enter키를 누릅니다.