vim에서 열린 파일에서 ^m linebreak를 '정상'라인 브레이크로 변환하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/811193

  •  03-07-2019
  •  | 
  •  

문제

vim은 모든 라인에서 끝나는 ^m을 보여줍니다

이것을 '일반적인'라인 브레이크로 교체하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

이것이 나를 위해 일한 유일한 것입니다.

: e ++ ff = dos

그것을 찾았습니다 : http://vim.wikia.com/wiki/file_format

다른 팁

명령

:%s/<Ctrl-V><Ctrl-M>/\r/g

어디에 <Ctrl-V><Ctrl-M> 유형을 의미합니다 Ctrl 키+V 그 다음에 Ctrl 키+.

설명

:%s

대체, % = 모든 라인

<Ctrl-V><Ctrl-M>

^m 캐릭터 (ctrl-v는 ctrl ^문자를 작성하는 vim 방법이며 ctrl-m은 정규 표현식 후 m을 씁니다.

/\r/

새로운 라인으로 (\r)

g

그리고 전 세계적으로 (라인에서 첫 번째 발생이 아니라).

Linux 및 Mac OS에서 다음은 작동합니다.

:%s/^V^M/^V^M/g

어디 ^V^M 유형을 의미합니다 Ctrl 키+V, 그 다음에 Ctrl 키+.

참고 : Windows에서는 아마도 사용하고 싶을 것입니다 ^Q 대신에 ^V, 기본적으로 ^V 붙여 넣기 텍스트에 매핑됩니다.

이내에 vim, 파일 형식 - dos 또는 unix를보십시오 :

:set filetype=unix

:set fileformat=unix

파일은 캐리지 리턴 (CR, ^m) 문자없이 다시 작성됩니다.

내가 BBEDIT로 만든 파일에서 본 파일 맥비 많은 무리를 표시하고있었습니다 ^M 라인이 일반 대신 반환됩니다. 다음 문자열 교체가 해결 된 문제 - 이것이 도움이되기를 바랍니다.

:%s/\r/\r/g

라인 브레이크를 동일한 문자로 교체하기 때문에 흥미 롭습니다. 그러나 Vim은 신선한 r을 올바르게 표시해야한다고 생각합니다. 나는 이것이 왜 작동하는지에 대한 근본적인 역학을 알고 싶을 것입니다.

먼저 사용합니다 :set ff? 파일 형식을 파일 형식을 파악하려면 파일이 있습니다.

나는 그것이 될 수 있다고 생각합니다 unix, 문제는 파일이 fileformat=dos 줄 끝에 "^m^J"를 추가하지만 flieformat=unix 라인 끝에서 "^j"만 제거하고 "^m"을 남겨 둡니다.

입력 :e ++ff=dos VIM 명령 줄에서 파일 형식을 UNIX에서 DOS로 변경합니다. 문제를 해결해야합니다. 그렇지 않다면 :%s/\r//g 당신을 도와야합니다.

일치하는 ^m 문자를 얻기 위해서는 시각적으로 그것을 선택한 다음 OS 사본을 클립 보드 명령으로 사용하여 검색해야했습니다. 교체 명령을 시도하기 전에 문자를 검색하여 테스트 할 수 있습니다.

/^M

첫 번째 나쁜 선을 선택해야합니다

:%s/^M/\r/g

모든 잘못된 ^m을 캐리지 리턴으로 대체합니다.

이것은 GVIM 7을 기반으로하는 MACVIM의 함수입니다.

편집하다:

Windows 용 Ubuntu가있는 Windows 10 머신 에이 문제가 다시 발생하면 VIM에 대한 파일 포맷 문제가 발생한다고 생각합니다. 이 경우 ff를 UNIX, MAC 또는 DOS로 변경하면 ^M을 ^J로 변경하고 다시 다시 변경하는 것 외에는 아무것도하지 않았습니다.

이 경우 솔루션 :

:%s/\r$/ /g
:%s/ $//g

내가이 길을 갔던 이유는 내가 파일로 파괴적이지 않기를 원했기 때문입니다. 나는 가질 수있다 :%s/\r$//g 그러나 그것은 마차 반품을 바로 삭제했을 것이며, 예상치 못한 결과를 얻었을 수 있습니다. 대신 우리는 단일 CR 캐릭터, 여기에서 ^m 캐릭터를 공간으로 변환 한 다음 선 끝의 모든 공간을 제거합니다 (나에게는 바람직한 결과입니다).

오랫동안 응답 해 온 오래된 질문을 되 살려서 유감스럽게 생각했지만 혼란이 생겼으며 Google 검색에서 높은 수준이 높아지기 때문에 그 중 일부를 정리하는 데 도움이 될 것이라고 생각했습니다.

이것들 중 어느 것도 나를 위해 일하지 않았으므로 이것을 시도했는데 다음과 같습니다.

유형 :%s/

누르다 Ctrl-vCtrl-M

유형 //g

누르다 입력하다

Vim Shoud의 전체 명령은 모양입니다 :%s/^M//g

이것이하는 일 : :%s (찾기 및 교체) /^M/ (그 상징) / (숯 없음) g (전 세계적으로).

Ctrl을 사용할 필요없이 : :%s/\r$//

나를 위해 일한 간단한 것

dos2unix   filename

나는 sed와 함께 이것을했다 :

sed -i -e 's/\r/\n/g' filename

^m은 검색됩니다 Ctrl 키+V 그리고 , 또한

s/^M//g

그냥 어때 : :%s/\r//g 그것은 나를 위해 완전히 효과가있었습니다.

이것이하는 일은 단지 모든 라인의 선 끝을 청소하는 것입니다. 그것은 ^m을 제거합니다.

Ctrl 키+ 내 창을 최소화하지만 Ctrl 키+입력하다 실제로 삽입 a ^M 캐릭터. 나는 또한 들어 가지 않아야했다. Ctrl 키 프레스 사이의 키.

그래서 나를위한 해결책은 다음과 같습니다.

:%s/<Ctrl-V><Ctrl-Enter>/\r/g

어디에 <Ctrl-V><Ctrl-Enter> 의미 길게 눌러 Ctrl 키, 누르고 릴리스 V, 누르고 릴리스 입력하다, 그런 다음 릴리스합니다 Ctrl 키.

Windows 생성 파일에서 작업하는 경우

위의 솔루션은 이미 보이지 않기 때문에 기존 라인 사이에 추가 라인을 추가합니다. \r^M.

이를 방지하려면 삭제하려고합니다 ^M 캐릭터를 교체하지 않고 문자.

:%s/<Ctrl-V><Ctrl-Enter>//g

어디에 % "이 버퍼에서"를 의미합니다. s "대체"를 의미합니다. / "(찾기) 다음 패턴을 의미합니다." <Ctrl-V><Ctrl-Enter> 눌러 눌러서 키를 나타냅니다 ^M 캐릭터 (위 참조), // "아무것도없이"(또는 "비어있는이 두 슬래시 사이의 패턴으로") 및 g a 깃발 라인에서 첫 번째 발생과는 달리 "전 세계적으로"를 의미합니다.

이 질문에 대한 다른 많은 답변이 있지만 여전히 다음은 명령 줄 솔루션이 필요했기 때문에 나에게 가장 적합합니다.

vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile

설명:

  • .VIMRC 파일을로드하지 않고 열면 열 수 있습니다 myfile
  • 운영 :e ++ff=dos 전체 파일을 DOS 라인 엔딩으로 다시로드합니다.
  • 운영 :w ++ff=unix Unix 라인 엔딩을 사용하여 파일을 작성합니다
  • vim을 종료하십시오

이것은 나를 위해 효과가있었습니다.

  1. 파일 형식 설정 UNIX (UNIX) (\n 라인 엔딩)
  2. 파일을 저장하십시오

그래서 VIM에서 :

:set ff=unix
:w

나의 경우에는,

위의 일이 작동하지 않았습니다. CSV 파일을 Mac에서 Linux 머신에 복사했으며 위의 모든 명령을 사용했지만 아래에 아무것도 도움이되지 않았습니다.

tr "\015" "\n" < inputfile > outputfile

^m 캐릭터가 아래와 같은 줄 사이에 샌드 스위치 된 파일이있었습니다.

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

또는 DOS2UNIX 및 UNIX2DOS라는 오픈 소스 유틸리티가 있습니다. Linux 시스템에서는 아마도 기본적으로 설치 될 수 있습니다. Windows 시스템의 경우 다운로드 할 수 있습니다 http://www.bastet.com/ 무엇보다도.

sed s/^M//g file1.txt > file2.txt

where ^M is typed by simultaneously pressing the 3 keys, ctrl + v + m

use dos2unix utility if the file was created on windows, use mac2unix utility if the file was created on mac. :)

This worked for me:

:% s/\r\n/\r

To save keystrokes, you can avoid typing Ctrl+VCtrl+M by placing this in a mapping. Just open a file containing a ^M character, yank it, and paste it into a line like this in your .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>

None of these suggestions were working for me having managed to get a load of ^M line breaks while working with both vim and eclipse. I suspect that I encountered an outside case but in case it helps anyone I did.

:%s/.$//g

And it sorted out my problem

:g/^M/s// /g

If you type ^M using Shift+6 Caps+M it won't accept.

You need to type ctrl+v ctrl+m.

^M gives unwanted line breaks. To handle this we can use the sed command as follows:

sed 's/\r//g'

Just removeset binary in your .vimrc!

Use one of these commands:

:%s/\r//g

Or

:%s/\r\(\n\)/\1/g

" This function preserves the list of jumps

fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
    set ff=unix
    w!
    "%s/\%x0d$//e
catch /E32:/
    echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

I've spent an afternoon struggling with \n ctrl-v 012 (both of which supply me with null). & laboured through this thread until I reached metagrapher's.

\r worked fine for me!

/),/s/),/)\r/g

turned something like this:

blacklist-extra:i386 (0.4.1, 0.4.1+nmu1), libmount1:i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1:i386 (2.20.1-5.1, 2.20.1-5.2), libapt-pkg4.12:i386 (0.9.7.4 , 0.9.7.5), nmap:i386 (6.00-0.1, 6.00-0.2), libsane-common:i386 (1.0.22-7.3,

into something like this:

26 libwv-1.2-4:i386 (1.2.9-3, automatic)
27 openjdk-6-jre-headless:i386 (6b24-1.11.4-3, automatic)
28 jed:i386 (0.99.19-2.1)

Magic. I am profoundly grateful

Or instead of using vim you can just fix the line breaks using this command

fromdos <filename.txt>

Hope it helps!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top