^M 在 Vim 中每行末尾

问题描述 投票:0回答:10

当我使用 Vim 和其他编辑器编辑源文件时,有时我会在每行末尾看到这些

^M
字符。 我认为这与在 Windows 上编辑文件然后在 Linux 上编辑文件有关。 我怎样才能自动删除所有这些?

vim newline carriage-return linefeed
10个回答
138
投票

作为命令,输入

:%s/^M$//

(要获取 ^M,请按 ^V ^M,其中 ^ 在大多数键盘上是 CTRL)


103
投票

去除 DOS 行结尾的一种简单方法是使用

ff
选项:

:set ff=unix
:wq

现在你的文件又回到了原来的 Unix 方式。

如果您想添加 DOS 行结尾(为了让打印机满意,或者与没有好工具的 Windows 朋友传输文件),您可以轻松地选择相反的方向:

:set ff=dos
:wq

35
投票

你可以这样做:

:set fileformats=dos

它将隐藏

^M
,而不触及文件。


19
投票

有一个名为 dos2unix 的程序可以为您删除这些内容。 Windows 使用不同的行结束字符,这就是发生这种情况的原因。


7
投票

这对我来说是一个将所有内容都写在一行的文件:

首先找到所有匹配项

:%s/^M//

(要获得

^M
,请按 ^V ^M,其中 ^ 在大多数键盘上是 Ctrl

然后替换为换行符

:%s//\r/g

组合命令为:

:%s/^M/\r/g

2
投票

我倾向于在重新打开受影响的文件之前通过

fromdos
运行它们。
fromdos
tofrodos 包的一部分。


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()

0
投票

mcedit:shift+f2,设置unix格式(LF),ok


0
投票

我的情况是,我是在Windows上开发项目,后来跑了一个Linux虚拟机,通过共享文件夹的方式,直接在Linux虚拟机中打开了原来在Windows上的项目。当我运行

git status
时,列出了大量文件,这些文件的每一行都以
^M
结尾。我用以下两个命令解决了这个问题。

git status -s | grep "^ M" | awk '{print $2}' | xargs dos2unix

git status -s | grep "^ M" | awk '{print $2}' | xargs git add

© www.soinside.com 2019 - 2024. All rights reserved.