我有一堆 DOS 格式的 PHP 脚本(vi
显示[noeol] [dos]
在状态行中),正如预期的那样,它们不可用。
我跑过dos2unix
它们来修复行尾:
dos2unix index.php
但是当我打开文件时,我仍然在状态行上vi
看到。[noeol]
在 vi 的十六进制编辑器模式 ( ) 中检查它们后,:%!xxd
我没有看到任何让我惊讶的东西。
在原始文件中,行尾看起来像:0x0D 0x0A
如果运行完后dos2unix
它们看起来像:0x0A
我还检查了文件的最后一行是否有正确的行尾,而且也在那里 ( 0x0A
)。
还有什么可能导致这种情况,我应该担心吗?
我正在运行 CentOS 5.6 x64。
答案1
正如@Klox 所说,在 后running dos2unix
,剩下的问题vi
显示是最后一行缺少换行符。
如果您打开文件vi
并保存它,它会为您添加换行符。
或者您可以批量完成整个操作ed
:
#!/bin/bash
for f in <list-of-files-goes-here>; do
ed -s -- "$f" <<<$',s/\r//g\nw' >/dev/null
done
答案2
它只是警告您最后一行没有行尾 (\n)。
答案3
DOS 机器在行尾输入回车符 (eol),在 vi 中应该如下所示^M
。
尝试运行这个:
:%s/^M//g
答案4
如果您使用 vim(而不是旧的 skool vi),您可以执行以下操作:
:set ff=dos
:e!
您将能够编辑 PHP 文件,而无需使用所有难看的“^M”后缀。我相信它也会保存为 DOS“文本文件”格式。如果您以某种方式与(呃!)Windows 共享文件,这会很有用。
一点社论:为 MS-DOS 选择的两字节行尾标记肯定是 MS-DOS 强加给世界的最大问题之一,仅次于段、驱动器字母和“\”目录分隔符。该两字节标记仍然是“文本”和“二进制”之间差异的原因。哎呀。