在windows上的gvim中,如果文本采用CRLF eol格式,则每行文本末尾会显示^M。如何“隐藏”该特殊字符?:set nolist命令无法消除它。
更新:我将fileformats设置为unix,dos列表格式。一开始没有生效,但是我关闭了文件并重新打开它,然后它就起作用了。默认情况下我只设置fileformats为unix值。感谢回答。
你可能想要将fileformat
设置为dos
。
:ed ++ff=dos %
:set fileformats=dos
要删除它们(这样您稍后就可以将文件保存为Unix文件):
:%s/\r//g
:set fileformats=dos
后,我需要通过 :e %
重新加载文件。然后所有的 ^M
字符都消失了。 - arr_sea:set fileformats=dos
,我假设我添加的任何新行分隔符也将是dos格式。例如,在“normal”模式下按下<CR>
将添加\r\n
。这就是我期望的,但如果是这种情况,“隐藏”可能是一种误导性的描述方式。具体来说,它们之所以被“隐藏”,是因为vim现在将换行符表示为\r\n
。如果这个假设是正确的,那么答案可以更新以使这更明显吗? - gbromios虽然一次性确定文件格式(DOS或Unix)当然是更可取的方式,但有时候一些同事可能并不太关心源代码管理的规范,不愿意让他们的编辑器符合标准。
在那种情况下,而不是完全转换文件(这会导致根据源代码管理系统完全重写的文件,使“blame”功能无效),我发现假装问题不存在是更好的选择。如果编译器可以容忍,而PHP肯定可以,你可以使用以下命令使混合EOL文件看起来完美无缺:
:match Invisible /\r$/
或者在更新版本的VIM 7.4+中
:match Ignore /\r$/
为了让事情变得更糟,大多数GUI编辑器在文本文件结尾没有加上换行符,并且当文件以换行符结尾时,它们会在底部显示一个空行。由于这有点烦人,大多数人会删除该空行,导致混合EOL文件(并在DOS文件格式中显示可怕的^Ms,如Vim所示)。如果有人知道如何使Eclipse或NetBeans遵守换行符终止而不显示最后一个空行(就像Vim一样聪明),请分享您的知识,您将使一名程序员感到高兴。;-)Invisible
的定义从分发的语法文件中消失了,所以我们可能需要在自己的.vimrc
中重新实现它。不幸的是,我不知道它最初是如何编码的。 - wiz:match Ignore /\r$/
。 - Kevin Seifert尝试使用以下方法进行清理(其中“清理”= Unix格式):
% tr -d '\015' < old.file > new.file
我想指出,如果你使用的是完整版的VIM(至少在我的ubuntu 9.10上),它会“按你所需”并自动隐藏它,但是标准的vi(和vim-tiny)不会自动隐藏^M。如果你进行最小安装(或服务器安装),你只会得到vi和vim-tiny。我找到的解决方法是在我的ubuntu上安装适当的vim(apt-get install vim)。希望这能帮助到因同样原因而遇到此问题的人们 :-D
:0,$ s/<ctrl-v><ctrl-m>//g
:set ff=dos
使用以下命令:
:1,$ s/^v^M/ /g
if char2nr(getline(1)[-1:-1]) == 13
e ++ff=dos
endif
:e ++ff=dos %
会在DOS/Windows模式下重新打开当前文件。:set fileformats=dos
将导致任何随后打开的文件以DOS/Windows模式打开。有关所有细节的良好解释可在http://vim.wikia.com/wiki/File_format找到。 - Kristopher Johnson