vim의 모든 줄 끝에서 ^ M


132

vim 및 다른 편집기를 사용하여 소스 파일을 편집 할 때 가끔 줄 끝에 이러한 ^ M 문자가 표시됩니다. Windows에서 파일을 편집 한 다음 Linux에서 파일을 편집하는 것과 관련이 있다고 생각합니다. 이 모든 것을 자동으로 제거하려면 어떻게해야합니까?


18
Windows는 줄 바꿈을 나타 내기 위해 두 문자 시퀀스 (일반적으로 "\ r \ n"로 작성 됨)를 사용하지만 UNIX / Linux는 줄 바꿈을 나타 내기 위해 두 번째 문자 "\ n"만 사용하기 때문입니다. 따라서 Linux 편집기에서 Windows 텍스트 파일을 편집하면 편집기는 줄 바꿈의 일부로 간주되지 않는 추가 문자를 보게되므로이를 렌더링하려고 시도하며 나오는 것은 ^ M입니다.
David Z

13
그것보다 조금 더 있습니다, David. Vim은 DOS 줄로 끝나는 텍스트 파일을 모두 표시하지 않고 행복하게 편집합니다 ^M. Vim에서 DOS 텍스트 파일을 편집 할 때 유일하게 표시 할 수 %{&ff}있는 것은 statusline옵션 값 이 있는 경우 입니다. Vim은 ^M줄 끝 스타일이 혼합 된 것을 보여줍니다 . 이는 Vim만큼 기본이 아닌 기존 줄 끝 스타일을 따르지 않은 Vim만큼 정통하지 않은 텍스트 편집기를 사용했음을 의미합니다. Windows에서 Vim 또는 그 밖의 구경을 사용하면 줄이 끊어지지 않습니다.
워렌 영

답변:


128

명령으로

:%s/^M$//

^ M을 얻으려면 ^ V ^ M을 누릅니다. 여기서 ^는 대부분의 키보드에서 CTRL입니다.


62
또한, : % S / \ 연구 $ // ^ V ^ M의 번거 로움을 피하기 위해
글렌 잭맨

8
또는 캐릭터 저장 ::%s/\r$
sehe

2
@sehe는 기술적으로 2 개의 문자를 저장합니다 :)
Chris

@glennjackman, ^ V + ^ M을 얻는 데 어려움을 겪고 있었기 때문에 팁이 훨씬 쉬워졌습니다. ^ V는 매번 효과적 이었으므로 반복되는 시도에도 불구하고 서로 다른 전략을 사용했지만 두 가지를 모두 얻었습니다.
itsraghz

86

DOS 줄 끝을 제거하는 쉬운 방법 중 하나는 다음 ff옵션 을 사용하는 것입니다.

:set ff=unix
:wq

이제 파일이 유닉스로 돌아 왔습니다.

DOS 줄 끝 을 추가 하려면 (프린터를 행복하게 유지하거나 멋진 도구가없는 Windows 친구와 파일을 전송하기 위해) 반대 방향으로 쉽게 이동할 수 있습니다.

:set ff=dos
:wq

8
vim은 ^ m 또는 \ r 또는 다른 줄 끝을 찾지 못했지만 작동했습니다. 감사합니다 :)
SgtPooki

2
Vim은 ^ M이나 \ r을 찾지 못했지만 이것은 나를 위해 일했습니다! 감사합니다 @sarnold
7ochem

git이 단일 문자 변경으로 감지하기에는 너무 바보처럼 보입니다. 나는 이것을 Vim에서 실행했으며 git diff모든 줄이 삭제되고 모든 줄이 추가되었음을 보여줍니다. /
Tommy

토미, 이건에 대한 제한이 diff아닙니다 git.
Spidey

34

당신은 이것을 할 수 있습니다 :

:set fileformats=dos

^M파일을 건드리지 않고의 파일 을 숨 깁니다 .


17

dos2unix 라는 프로그램 이 있습니다. Windows는 다른 줄 끝 문자를 사용하므로 이런 일이 발생합니다.


6

이것은 한 줄에 모든 것이있는 파일에서 나를 위해 일했습니다.

먼저 모든 경기를 찾으십시오

:%s/^M//

(를 얻으려면 ^M^ V ^ M을 누르십시오. 여기서 ^는 Ctrl대부분의 키보드에 있습니다)

그런 다음 줄 바꿈으로 바꿉니다.

:%s//\r/g

결합 된 명령은 다음과 같습니다.

:%s/^M/\r/g

감사합니다. 검색 대체에 실제로 Ctrl-M을 입력하는 방법이 궁금합니다!
Roboprog

2

감염된 파일을 fromdos다시 열기 전에이를 실행하는 경향이 있습니다. tofrodos 패키지의 fromdos일부입니다 .


1

문제의 원인은 FTP 전송을 통한 것일 수 있습니다. 한 상자에서 다른 상자로 이러한 파일을 FTP로 전송할 때는 ASCII 전송을 사용해야합니다. "ASC"명령을 사용하십시오.


0
" put this in your ~/.vimrc file and :source ~/.vimrc
" then you can do: Dos2Unix
" dos2unix ^M
fun! Dos2unixFunction()
    let _s=@/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, first save the file."
    endtry
    let @/=_s
    call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

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