美元符号在Vim中显示为行尾字符,并且无法删除

时间:2013-10-02 15:31:09

标签: vim

当我尝试执行我的脚本时,我^M是一个无效字符,但在Vim中,我在输入$时看到:set list

我尝试了:%s/^V^M//g,但是说找不到^M模式

我猜这是因为我使用了一些.vimrc我发现here会将行尾字符转换为$

如果不解决这个问题,我唯一的选择就是重新输入我的剧本。

4 个答案:

答案 0 :(得分:3)

看起来您的脚本始终有^M行结尾,因此被检测为fileformat=dos:setlocal fileformat?会告诉你。

要将此文件转换为Unix(LF)行结尾,只需:setlocal fileformat=unix:write,或将其合并到:w ++ff=unix

如果您从未希望Vim检测到此类文件(并显示^M),请将:set fileformats-=dos放入~/.vimrc(或编辑现有配置)。

答案 1 :(得分:2)

se nolist美元符号将消失。

无论操作系统如何,您的文字总是有行结尾。

行结尾是空格并且始终存在,但通常只显示。

答案 2 :(得分:0)

您使用的是Windows还是* nix?

在Windows中

,您可以将^ M替换为ctlr-q ctrl-m以输入^ M.在* nix中,您可以使用dos2unix将脚本文件转换为unix格式。

答案 3 :(得分:0)

如果在打开文件后您没有在行尾看到^M,但是当您尝试采购时,vim会在各个地方显示有关^M的抱怨您唯一需要做的事情是w ++ff=unix并重新打开此文件。

当你打开文件时,vim检测到行结束格式。因此,尝试替换^M将不起作用:所有检测到的行结尾都将转换为内部字符串结尾。例如。当文件格式像你的情况一样,它看起来像

set nocompatible\r\nset ignorecase\r\n...

(其中\r为回车符,有时表示为^M\n为换行符,\r\n序列为dos行结尾)。当文件格式为unix时,它看起来像

set nocompatible\nset ignorecase\n...

。对于mac,它看起来像

set nocompatible\rset ignorecase\r...

。但是如果vim正确检测到行结尾所有这些文件转换为

"set nocompatible"
"set ignorecase"
"..."

表示缓冲区的内部结构中的C字符串,每个字符串代表一行。没有\r,没有\n

执行:w时,文件将转换回字节序列。 :w ++ff=unix迫使行结束。需要重新打开,因为在这种情况下fileformat设置未更改,因此没有w的下一个++ff将再次保存dos行结尾。当您重新打开行结尾时,将重新检测并重新分配fileformat设置。您可以在:set fileformat=unix之后手动:w ++ff=unix,但:e输入速度要快得多。