^ M 문자는 Vim에서 무엇을 의미합니까?


500

^Mvimrc에 계속 문자가 표시되고 구성이 깨집니다.


35
BTW 이것은 훌륭한 자료입니다.
궤도에서 가벼움 레이스

@LightnessRacesinOrbit-흠, 지금도 작동합니다. 링크가 죽었다는 내 의견을 철회했습니다.
ArtOfWarfare

3
순간 다운 @LightnessRacesinOrbit 링크의 거울 : fifi.org/doc/vim/html/digraph.html#digraph-table
alexpls

4
:digraphsvim 내에 입력 하면 @LightnessRacesinOrbit가 연결된 digraph-table이 표시됩니다.
askewchan

1
PHP를 사용하여 이런 종류의 문자를 바꾸려고 할 때 preg_replace('/[\x01]/', ' ' ,$str); 도움 이 되길 바랍니다.
Rachel Geller

답변:


561

유닉스는 개행 문자에 0xA를 사용합니다. Windows는 0xD 0xA의 두 문자 조합을 사용합니다. 0xD는 캐리지 리턴 문자입니다. ^Mvim이 0xD를 표시하는 방식입니다 (0x0D = 13, M은 영어 알파벳에서 13 번째 문자 임).

^M다음을 실행하여 모든 문자를 제거 할 수 있습니다 .

:%s/^M//g

어디 ^M누르고 입력 Ctrl하고 입력 v한 다음 m, 다음 공개 Ctrl. 간혹 약어로 표시 ^V^M되지만 문자 그대로 입력하지 않고 이전 문장에서 설명한대로 입력해야합니다.

이 표현식은 모든 발생을 ^M빈 문자열로 대체 합니다 (예 : 아무것도 없음). 나는 이것을 ^MWindows에서 Unix (Solaris, Linux, OSX)로 복사 한 파일에서 제거하기 위해 사용합니다 .


9
Windows를 사용하는 경우 Ctrl + V가 붙여 넣기로 매핑 될 수 있습니다. 이 경우 기본값은 "특수 문자 이스케이프"키를 Ctrl + Q로 다시 매핑합니다.
R. Martinho Fernandes

8
실제 질문은 Vim이 때때로 자동으로 줄 끝을 감지하여 올바르게 표시하는 이유입니다.
Scott

10
^M파일의 줄 끝이 일치하지 않으면 문자 가 표시 됩니다. Tomasz에서 제공 한 명령을 사용한 다음 :fileformat={unix|dos|mac}대상 OS에 따라 입력하십시오 . ^M문자가 없는 줄이 몇 개만 있으면을 원할 것 :fileformat=dos입니다. vim 이외의 편집기에서 파일을 편집하는 경우 파일이 줄 끝과 일치하도록 구성되어 있는지 확인하십시오 (메모장은이 작업을 수행하지 않지만 Notepad ++ 또는 TextMate와 같은 평판이 좋은 편집기는 작동합니다).
Mikkel Paulson

9
초보자에게는 vi해당 명령을 수동으로 입력해야합니다. vi실행중인 열린 터미널에 붙여 넣기 만하면 "패턴을 찾을 수 없음"오류가 발생합니다.
IQAndreas

51
@bluesm 실제로 :%s/\r//g파일의 캐리지 리턴을 바꾸는 데 사용해야 했습니다. ^ M 문자가 많은 파일에서 ^ V ^ M 패턴을 찾을 수 없습니다.
jonnybot

139
:%s/\r//g 

오늘 저를 위해 일했습니다. 그러나 내 상황은 약간 다를 수 있습니다.


1
g 옵션은 필요하지 않으며 한 줄에 하나의 줄만 있습니다. :%s/\r//충분할 것입니다.
frogcoder

7
캐리지 리턴은 반드시 개행 문자 일 필요는 없으므로 g 옵션이 필요할 수도 있습니다. 유닉스 모드에서 열 때 캐리지 리턴은 다른 문자 일 뿐이며 Windows 모드에서 열 때 캐리지 리턴은 바로 다음에 줄 바꿈이 뒤 따릅니다.
조나단 볼드윈

65

줄 바꾸기 대신 새 줄을 번역하려면 :

:%s/\r/\r/g

2
이것은 실제로 무엇을해야합니까? 나에게는 그것이 like를 대신하는 것처럼 보이고, 나는 아무것도 바꿀 것이라고 상상할 수 없습니다. 구문이 어떻게 작동하는지에 대한 특별한 내용이 누락 되었습니까?
Platinum Azure

16
@PlatinumAzure 왜 아무도 당신의 질문에 대답하려고 생각하지 못했습니다. \r검색 부분과 교체 부분의 동작이 다릅니다. 예를 들어 stackoverflow.com/a/3834303 을 참조하십시오 .

또는 :%s/^V^M/^V^M/g 참조 여기
tomd

@TomD 링크는 댓글을 달고있는 답변을 나타냅니다.
bzeaman

나를 위해 이것은 성가신 캐릭터를 추가 줄 바꿈으로 대체했습니다. @ dlk5730 답변이 더 효과적이었습니다. 즉:%s/\r//g
marcusshep

37

아마도 캐리지 리턴이 있다는 것을 의미합니다 (다른 운영 체제는 다른 방법으로 라인 끝을 알리는 신호를 보냅니다).

dos2unixvim에서 파일을 수정하거나 파일 형식을 설정하는 데 사용하십시오 .

set ffs=unix,dos

19

텍스트 파일이 -file.txt라고 가정 하고이 명령을 실행하십시오-

dos2unix file.txt 

텍스트 파일을 dos에서 unix 형식으로 변환합니다.


완벽하게 작동합니다!
robe007

9

원래 Mac 사용자를 통해 Windows 시스템에서 생성 된 텍스트 파일을 받았으며이를 사용하여 Linux MySQL DB로 가져와야했습니다. load data 명령을 .

VIM에 '^ M'문자가 표시되었지만 위의 어느 것도 내 특정 문제에 대해 효과가 없었지만 데이터는 가져 오지만 항상 어떤 식 으로든 손상되었습니다. 솔루션은 결국 (많은 좌절 후) 매우 쉬웠습니다.

솔루션 : 동일한 파일에서 dos2unix TWICE 를 실행 하면 트릭이되었습니다! file명령을 사용하면 진행 상황을 보여줍니다.

$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text

그리고 파일의 최종 버전은 데이터베이스로 완벽하게 가져 왔습니다.


9

유닉스에서는 아마도 'tr'명령을 사용하는 것이 더 쉽습니다.

cat file1.txt | tr "\r" "\n" > file2.txt

9

sed로 모두 제거했습니다.

sed -i -e 's/\r//g' <filename>

다른 문자열 또는 문자로 바꿀 수도 있습니다.

sed -i -e 's/\r/string/g' <filename>

이러한 sed명령은 GNU / Linux 버전에서 작동 sed하지만 BSD (macOS 포함)에서 조정이 필요할 수 있습니다.


4

당신은 이것을 사용하여 vim에서 고칠 수 있습니다

:1,$s/^V^M//g

여기서 ^는 제어 문자입니다.


2
이것은 무엇인지 설명하지 않습니다 ^M.
궤도에서 가벼움 레이스

2
그는 실제로 그것이 무엇인지 묻지 않고 그것을 고치는 방법을 묻고 있습니다. 이것이 DOS의 캐리지 리턴 문자입니다.
Scott C Wilson

3
나는 그것이 무엇인지 안다. 질문의 제목은 "Vim에서 ^ M 문자의 의미"입니다.
궤도에서 가벼움 경주


2

구성이 중단되고 맵핑에 ^ M 문자가 필요한 경우 ^ M 문자를 간단히 <Enter>또는 심지어 <C-m>(간단한 문자 순서로 입력하여 각각 7 및 5 문자로) 대체 할 수 있습니다 .

이것은 매핑에 특수 키 코드를 저장하는 권장되는 단일 휴대용 방법입니다.


2

FreeBSD에서는 ^M다음을 입력하여 수동으로 지울 수 있습니다 .

:%s/ Ctrl+ V다음 Ctrl+ M다음 Ctrl+ M다시.


1

fileformat의도적 으로 다른 방식 으로 (예 :e ++ff=unix: Windows 파일) 지정하지 않은 경우 대상 파일에 혼합 된 EOL이있을 수 있습니다.

파일이 일부 라인이있는 경우 예를 들어, <CR><NL>와 결말 등 <NL>엔딩, 그리고 fileformat으로 설정 unix을 읽을 때 빔에 의해 자동으로 ^M (<CR>)나타납니다. 그러한 경우에, fileformats놀이에 온다. 자세한 내용 :help ffs은 참조 하십시오.


0

내 Homebrew Mvim 인스턴스가 filetype = dos를 사용하도록 설정되어 있기 때문에 몇 주 동안 파일을 오염시키고 있음을 발견했습니다. .vimrc에서 필요한 변경 사항을 작성했습니다 ...


0

:%s/\^M//적어도 이것이 나를 위해 일해 보십시오 .

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