当我使用 Vim 和其他编辑器编辑源文件时,有时我会在每行末尾看到这些
^M
字符。
我认为这与在 Windows 上编辑文件然后在 Linux 上编辑文件有关。
我怎样才能自动删除所有这些?
作为命令,输入
:%s/^M$//
(要获取 ^M,请按 ^V ^M,其中 ^ 在大多数键盘上是 CTRL)
去除 DOS 行结尾的一种简单方法是使用
ff
选项:
:set ff=unix
:wq
现在你的文件又回到了原来的 Unix 方式。
如果您想添加 DOS 行结尾(为了让打印机满意,或者与没有好工具的 Windows 朋友传输文件),您可以轻松地选择相反的方向:
:set ff=dos
:wq
你可以这样做:
:set fileformats=dos
它将隐藏
^M
,而不触及文件。
有一个名为 dos2unix 的程序可以为您删除这些内容。 Windows 使用不同的行结束字符,这就是发生这种情况的原因。
这对我来说是一个将所有内容都写在一行的文件:
首先找到所有匹配项
:%s/^M//
(要获得
^M
,请按 ^V ^M,其中 ^ 在大多数键盘上是 Ctrl)
然后替换为换行符
:%s//\r/g
组合命令为:
:%s/^M/\r/g
问题的根源可能是通过 FTP 传输。当您通过 FTP 将这些文件从一个盒子传输到另一个盒子时,请确保使用 ASCII 传输。使用命令“ASC”。
" 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()
mcedit:shift+f2,设置unix格式(LF),ok
我的情况是,我是在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