dos2unix 是一个命令行实用程序,如果您使用 Ctrl-v Ctrl-m,:%s/^M//g
将执行此操作 输入 ^M,或者你可以 :set ff=unix
并且 Vim 会为你做。
有关于 fileformat 设置的文档,Vim wiki 有一个全面的 page on line ending conversions。
或者,如果你来回移动文件很多,你可能不想转换它们,而是做 :set ff=dos
,所以 Vim 会知道它是一个 DOS 文件并使用 DOS 约定作为行尾。
更改视图中的行尾:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
这也可以用作保存操作(单独的:w 不会使用您在屏幕上看到的行尾进行保存):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
您可以从命令行使用它:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
比这里写的大多数其他东西要好得多,bash 脚本是一个不错的奖励。
:e
命令在我的 Windows vim 安装中似乎没有任何作用。我的视图仍然显示 ^M
代码。
:e ++ff=unix
,但对我来说最简单的工作是 :w ++ff=unix
然后退出 &重新打开文件。
我通常使用
:%s/\r/\r/g
这似乎有点奇怪,但由于 Vim 匹配换行符的方式而有效。我也发现它更容易记住:)
:set ff=unix
的任何问题,但我今天打开的文件一定特别奇怪。 Vim 说它已经是 fileformat=unix
但所有的行尾都是 ^M
。这个解决方案对我有用。
:%s/\r//g
反而对我有用。
:%s/\r//g
是唯一的通用解决方案——特别是对于包含 DOS 和 UNIX 样式换行符的异构混合的混合模式文件。规范解决方案(例如,:set ff=unix
、:e ++ff=unix
)假设当前缓冲区的每一行都以相同的换行样式结束。有时他们会这样做;有时他们不会。 提示悲伤的表情。
我更喜欢使用以下命令:
:set fileformat=unix
您还可以使用 mac
或 dos
分别将您的文件转换为 Mac 或 MS-DOS/Windows 文件约定。如果文件已经是正确的格式,它什么也不做。
有关详细信息,请参阅 Vim 帮助:
:help fileformat
^M
个字符。
set fileformat=unix
添加到我的 .vimrc 文件中有效。
:set fileformat=unix
从 DOS 转换为 Unix。
:%s/\r\+//g
在 Vim 中,这会去掉所有回车,只留下换行符。
:%s/\r//g
时,它就像一个魅力。
来自:File format
[Esc] :%s/\r$//
在 VIM 中:
:e ++ff=dos | set ff=unix | w!
在带有 VIM 的 shell 中:
vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
e ++ff=dos
- 强制以 dos
格式打开文件。
set ff=unix
- 将文件转换为 unix
格式。
dos2unix
可以直接修改文件内容。
您可以直接在文件上使用它,而无需临时文件重定向。
dos2unix input.txt input.txt
以上使用假定的美式键盘。使用 -437
选项使用英国键盘。
dos2unix -437 input.txt input.txt
将文件目录从 DOS 转换为 Unix
使用命令行和 sed,在当前目录中查找所有扩展名为“.ext”的文件并删除所有“^M”
@https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
此外,如上一个答案所述,^M = Ctrl+V + Ctrl+M(不要只键入插入符号“^”符号和 M)。
以下步骤可以将 DOS 的文件格式转换为 Unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using Unix (LF-only) line endings.
参考:File format
直接在 Linux 控制台中运行:
vim file.txt +"set ff=unix" +wq
我找到了一个非常简单的方法:使用 nano 打开文件:nano file.txt
按 Ctrl + O 保存,但在按 Enter 之前,按 Alt+D 在 DOS 和 Unix/Linux 行尾之间切换,或者: Alt+M 在 Mac 和 Unix/Linux 行尾之间切换,然后按 Enter保存和 Ctrl+X 退出。
^M
结尾。另存为dos保留,另存为linux删除。可以使用 cat -v
检查
关于让 ^M 出现的评论对我有用。仅在我的 vi 中键入“^M”一无所获(未找到)。 CTRL+V CTRL+M 序列虽然做得很完美。
我的工作替换命令是
:%s/Ctrl-V Ctrl-M/\r/g
它在我的屏幕上看起来像这样:
:%s/^M/\r/g
使用以下命令:
:%s/^M$//g
要显示 ^M
,请键入 CtrlV,然后键入 CtrlM。 CtrlV 告诉 Vim 直接输入下一个字符。
:g/Ctrl-v Ctrl-m/s///
CtrlM 是字符 \r
,或回车,DOS 行尾添加。 CtrlV 告诉 Vim 在命令行插入一个文字 CtrlM 字符。
作为一个整体,此命令将所有 \r
替换为空,将它们从行尾删除。
您可以使用以下命令:
:%s/^V^M//g
其中“^”表示使用 CTRL 键。
以下命令用于重新格式化当前目录中的所有 .sh 文件。我在我的 Fedora 操作系统上对其进行了测试。
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
我想要换行符代替 ^M。 Perl 的救援:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
或写入标准输出:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
通常有一个 dos2unix
命令可供您使用。只需确保您阅读了手册,因为 GNU 和 BSD 版本在处理参数的方式上有所不同。
BSD版本:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU 版本:
dos2unix $FILENAME
或者,您可以在此处使用任何建议的答案创建自己的 dos2unix
,例如:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
来自维基:
%s/\r\+$//g
这将找到所有回车符号(一个和多个代表)直到行尾并删除,因此只有 \n
将留在 EOL。
这是我的方式。我在 DOS EOL 中打开了一个文件,当我保存文件时,它会自动转换为 Unix EOL:
autocmd BufWrite * :set ff=unix
如果您在记事本或 Windows 中的 Notepad++ 中创建一个文件,将其带到 Linux 并通过 Vim 打开它,您将在每一行的末尾看到 ^M。要删除它,
在您的 Linux 终端上,键入
dos2unix filename.ext
这将发挥所需的魔力。
我知道我在某个地方看到过这个。以下是 FreeBSD 登录提示:
您是否需要从 DOS 文件中删除所有这些 ^M 字符?尝试
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
不定期副业成功案例分享
:%s/^M//g
应该是:%s/\r//g
,因为^M
只是表示“匹配行首的大写“M””。:%s/\r//g
对我有用,干杯 @Bunykset ff=unix
什么都不做。也许它会转换文件,但所有^M
字符仍然存在。