在Vim中将DOS行尾转换为Linux行尾

时间:2020-03-05 18:58:45  来源:igfitidea点击:

如果打开在Windows中创建的文件,则所有行均以^ M结尾。
如何一次删除所有这些字符?

解决方案

回答

:%s/\r+//g

在Vim中,这会删除所有回车符,并仅保留换行符。

回答

:g/Ctrl-v Ctrl-m/s///

<KBD> Ctrl <KBD> M是DOS行尾添加的字符\ r或者回车符。 <KBD> Ctrl <KBD> V告诉vim在命令行中插入文字<KBD> Ctrl <KBD> M字符。

总体而言,此命令将所有\ r替换为空,将它们从行尾删除。

回答

dos2unix是可以执行此操作的命令行实用程序,如果我们使用Ctrl-v Ctrl + m来输入^ M,则:%s / ^ M // g或者:set ff = unix`,而vim会为我们完成。

"文件格式"设置上的文档在这里,并且vim Wiki上有关于行尾转换的完整页面。

另外,如果我们来回移动文件很多,我们可能不想转换它们,而是执行:set ff = dos,因此vim会知道它是一个DOS文件,并使用DOS约定作为行尾。

回答

我们可以使用以下命令:
:%s / ^ V ^ M // g
其中的" ^"表示使用" CTRL"键。

回答

使用以下命令:

:%s/^M$//g

使" ^ M"出现,先键入<KBD> Ctrl <KBD> V,然后键入<KBD> Ctrl <KBD> M。 <KBD> Ctrl <KBD> V告诉Vim接受字面输入的下一个字符。

回答

来自:http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

[Esc]:%s / \ r $ //

回答

我更喜欢使用以下命令:

:set fileformat=unix

我们也可以使用mac或者dos分别将文件转换为macintosh或者MS-DOS / MS-Windows文件约定。如果文件已经采用正确的格式,则不会执行任何操作。

有关更多信息,请参见vim帮助:

:help fileformat

回答

:set fileformat = unix可以将dos转换为unix。

回答

更改视图中的行尾:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

这也可以用作保存操作(仅:w不会使用我们在屏幕上看到的行尾进行保存):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

我们可以从命令行使用它:

for file in $(ls *cpp)
do 
  vi +':w ++ff=unix' +':q' ${file}
done

回答

我通常使用

:%s/\r/\r/g

这似乎有点奇怪,但由于vim与换行符匹配的方式而起作用。我还发现它更容易记住:)

回答

通常,我们可以使用一个" dos2unix"命令,只需确保我们已阅读手册即可,因为GNU和BSD版本在处理参数的方式上有所不同。

BSD版本:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU版本:

dos2unix $FILENAME

另外,我们也可以在此处使用任何建议的答案来创建自己的dos2unix,例如:

function dos2unix(){
    [ "${!}" ] && [ -f "{}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "";
}

回答

dos2unix可以直接修改文件内容。

我们可以直接在文件上使用它,而无需临时文件重定向。

dos2unix input.txt input.txt

上面使用了假定的美式键盘。使用-437选项来使用英国键盘。

dos2unix -437 input.txt input.txt