Linux上是否有文本编辑器允许我查看换行符和回车符?Vim支持这个特性吗?
当前回答
只是为了澄清为什么:set list不会将CR显示为^M,没有e++ ff=unix,以及为什么:set list与^M无关。
在内部,当Vim将文件读入缓冲区时,它用自己的表示(让我们称之为$'s)替换所有的行结束字符。为了确定应该删除哪些字符,它首先检测文件中存储的行结束符的格式。如果只有CRLF '\r\n'或只有CR '\r'或只有LF '\n'行结束字符,则'fileformat'将分别设置为dos, mac和unix。
当设置了list选项时,无论检测到什么文件格式选项,Vim都会在换行时显示$ character。它使用自己的内部换行表示,这就是它所显示的内容。
现在,当您将缓冲区写入磁盘时,Vim根据检测到的文件格式选项插入行结束字符,实际上是将所有内部的$转换为适当的字符。如果文件格式恰好是unix,那么它将简单地写入\n来代替内部的换行符。
诀窍是强制Vim将dos编码的文件作为unix文件读取。最终的效果是,它将删除所有的\n,而\r的不受影响,并将它们显示为缓冲区中的^M。设置:设置列表将额外显示内部行结束符为$。毕竟,你看到^M$取代了dos编码的换行符。
还要注意:set list与显示^M无关。您可以自己检查它(确保您首先禁用了列表选项),通过在插入模式中使用CTRL-V和Enter插入单个CR。在将缓冲区写入磁盘并再次打开它之后,您将看到^M,尽管列表选项被设置为0。
你可以在http://vim.wikia.com/wiki/File_format上找到更多关于文件格式的信息,或者在Vim中键入:help 'fileformat'。
其他回答
不同意官方答案:
:set list不会显示^M个字符(CRs)。将-b选项提供给vi/Vim可以工作。或者,一旦加载了Vim,输入:e++ ff=unix。
vi通过显示下一行的后续文本来显示换行符(LF字符,代码x0A)。
二进制模式使用-b开关。例如,vi -b filename或vim -b filename——。
然后它将显示CR字符(x0D),这些字符通常不用于Unix风格的文件,作为字符^M。
只是为了澄清为什么:set list不会将CR显示为^M,没有e++ ff=unix,以及为什么:set list与^M无关。
在内部,当Vim将文件读入缓冲区时,它用自己的表示(让我们称之为$'s)替换所有的行结束字符。为了确定应该删除哪些字符,它首先检测文件中存储的行结束符的格式。如果只有CRLF '\r\n'或只有CR '\r'或只有LF '\n'行结束字符,则'fileformat'将分别设置为dos, mac和unix。
当设置了list选项时,无论检测到什么文件格式选项,Vim都会在换行时显示$ character。它使用自己的内部换行表示,这就是它所显示的内容。
现在,当您将缓冲区写入磁盘时,Vim根据检测到的文件格式选项插入行结束字符,实际上是将所有内部的$转换为适当的字符。如果文件格式恰好是unix,那么它将简单地写入\n来代替内部的换行符。
诀窍是强制Vim将dos编码的文件作为unix文件读取。最终的效果是,它将删除所有的\n,而\r的不受影响,并将它们显示为缓冲区中的^M。设置:设置列表将额外显示内部行结束符为$。毕竟,你看到^M$取代了dos编码的换行符。
还要注意:set list与显示^M无关。您可以自己检查它(确保您首先禁用了列表选项),通过在插入模式中使用CTRL-V和Enter插入单个CR。在将缓冲区写入磁盘并再次打开它之后,您将看到^M,尽管列表选项被设置为0。
你可以在http://vim.wikia.com/wiki/File_format上找到更多关于文件格式的信息,或者在Vim中键入:help 'fileformat'。
我建议您编辑您的.vimrc文件,以运行命令列表。
编辑你的.vimrc文件,像这样:
cat >> ~/.vimrc <<EOF
set ffs=unix
set encoding=utf-8
set fileencoding=utf-8
set listchars=eol:¶
set list
EOF
当你执行Vim时,.vimrc文件中的命令被执行,你可以看到这个例子:
My line with CRLF eol here ^M¶
试试下面的命令。
:set binary
在Vim中,这应该与使用“-b”命令行选项所做的事情相同。如果你把它放在你的启动文件(例如,.vimrc)中,它将永远为你而存在。
在许多*nix系统上,有一个"dos2unix"或"unix2dos"命令可以处理文件并纠正任何可疑的行结束问题。如果行结束符没有任何问题,则不会更改文件。