使用vim编辑一个没有EOL标记但拥有CRLF行结尾的文件

3

我经常需要编辑脚本文件,但解释器会将文件中的EOL标记在文件的最后一行视为错误(即文件将CRLF视为“换行符”,而不是“行结束符”)。

目前,我使用二进制模式(命令行上的-b)在Vim中打开这些文件。它会自动检测到最后一行缺少EOL,并适当设置“noeol”选项,以防止在最后一行写入EOL。

因为该文件具有CRLF行结束符,所以我的每行末尾都会出现很多^ M(因为它似乎只在二进制模式下解析Unix样式的行结束符)。我无法以文本模式打开它,因为对于非二进制文件,“noeol”选项会被忽略。

这非常恼人,我总是要记住手动在每行末尾键入^ M!有没有办法强制使其接受DOS样式的行结束符,在二进制模式下或在文本模式下依据EOL选项执行?

2个回答

0

是的,你不需要在每一行手动输入^M;那会很繁琐!尝试输入这个:

:set ff=dos

您可能会发现这篇文章有用:更改 DOS-Unix 的行尾格式

经过进一步的审查,全局搜索和替换可能是必要的,所以试试这个方法。(我今天早些时候在 Windows XP 上使用 gvim 编辑 Unix 文件并测试了它,但不是在二进制模式下。)

:%s/^M//g

输入该命令时,请确保完全按照显示的格式,除了特殊字符^M。产生这个字符的方法是同时按下Ctrlv键,然后再按Enter键(在按下Enter键之前松开CRTL+V组合键)。


我知道将文本文件设置为DOS模式的文件格式。但是在二进制模式下似乎不起作用。我尝试在打开文件后使用该命令,也尝试在命令行上使用“--cmd”选项。但这两种方法都没有产生任何效果。 - rmeador

0

在编辑之前,你能运行dos2unix命令吗?


我原以为这会毁掉文件,但它似乎完全正常。这并不是一个理想的解决方案,我一直在等待更好的答案,但我猜它不会出现...我会接受这个答案,但如果有更好的答案出现,我可能会选择它。 - rmeador

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接