当我尝试执行我的脚本时,我^M
是一个无效字符,但在Vim中,我在输入$
时看到:set list
我尝试了:%s/^V^M//g
,但是说找不到^M
模式
我猜这是因为我使用了一些.vimrc
我发现here会将行尾字符转换为$
如果不解决这个问题,我唯一的选择就是重新输入我的剧本。
答案 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
输入速度要快得多。