Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gVim显示回车符(^M),即使文件模式为显式DOS_Vim_Carriage Return_Line Endings - Fatal编程技术网

gVim显示回车符(^M),即使文件模式为显式DOS

gVim显示回车符(^M),即使文件模式为显式DOS,vim,carriage-return,line-endings,Vim,Carriage Return,Line Endings,我在Windows上使用gVim。我的代码在行尾显示^M个字符。我使用了:set ff=dos没有用。现有行保留^M字符,但输入的换行符不显示。我已经将模式切换到mac(显示^J字符)和unix(也显示^M字符)并返回到dos。还有其他人看到过吗?当您混合使用Windows行结尾和Unix行结尾时,会发生这种情况。如果有100行,其中99行是\r\n,一行是\n,您将看到99^M个字符。解决办法是找到那一行并替换它。或者在该文件上运行dos2unix。可以将窗线端点替换为: :%s/\r\(\n

我在Windows上使用gVim。我的代码在行尾显示
^M
个字符。我使用了
:set ff=dos
没有用。现有行保留
^M
字符,但输入的换行符不显示。我已经将模式切换到mac(显示
^J
字符)和unix(也显示
^M
字符)并返回到dos。还有其他人看到过吗?

当您混合使用Windows行结尾和Unix行结尾时,会发生这种情况。如果有100行,其中99行是\r\n,一行是\n,您将看到99^M个字符。解决办法是找到那一行并替换它。或者在该文件上运行dos2unix。可以将窗线端点替换为:


:%s/\r\(\n\)/\1/g

我通常使用以下方法清理行尾:

:g/^M$/s///
为了得到ctrl-M,我通常先键入ctrl-Q,然后键入ctrl-M,然后输入。(在某些环境中可能是ctrl-V然后是ctrl-M。)我不知道为什么,但我发现这一个比“s”更容易记住


别忘了做
:也设置ff=dos
,否则你最终还是会用UNIX行结尾保存。

我知道这已经得到了回答,但我使用的一个技巧是

:%s/\r/\r/g

这将用windows CRLF替换unix回车。只是为了防止其他人有问题而添加。

实际上,对我有效的是(在64位windows上,gVIM:7.2):


不仅仅是:ff

在Windows 7上运行Vim 7.3。我使用了以下命令:

:%s/^M/\r/g
要创建^M,我先按CTRL+Q,然后按CTRL+M。您还可以运行:

:e ++ff=dos

要删除
^M
:请参阅。

这对许多人来说可能有点简单,但很可能会有用

根据richq的回答,我发现这些在我的vimrc中很有用。注意,第二个是正常注释掉的,因为它使dd有点混乱,因为Vim将等待另一个按键来确定它是否是映射的ex命令

function! D2u() execute '%s/\r\(\n\)/\1/g' endfunction "map d2u :%s/\r\(\n\)/\1/g 功能!D2u() 执行“%s/\r\(\n\)/\1/g” 端功能 “映射d2u:%s/\r\(\n\)/\1/g
第一个是在ex中键入
call D2u()
,第二个是在编辑模式下按
D2u

您可以忽略这些字符

把这个放到你的vimrc里

匹配忽略/\r$/


这些是额外的CR行结尾,通常是因为在UNIX/DOS混合系统上使用文件

从每行末尾删除一个^M的最短答案可能是:

:%s/\r
这相当于:

:%s/\r//

但是结尾斜杠不是必需的(它们是假定的)。

尝试了很多方法,但下面的方法奏效了

:%s/\r/\r/g

注意:如果你想在整个文件上产生效果,请使用g。我在你写这篇文章之前发现了一行。谢谢!嘿,典型的。Vim很棒,所以请坚持下去!:-)我希望我能给你+1000。我通常只需用
:s/^M/
将其添加到
:set ff=dos
中,如果你想在完成后成为dos,ala Evan'ss答案。是的,我通常使用带Ctrl-Q的^M版本。但更难解释;-)和组匹配版本是复制粘贴友好的。这就是我一直在寻找的,并且是实际的正确答案。谢谢。很高兴知道这是存在的,但是在文件中保留不匹配的行尾是否有一个好的用例?似乎是这样的自找麻烦。这正是我所需要的(当文件在某些版本控制系统中出现大量更改时,更改文件并不总是可取的)不幸的是,这会在您保存文件后立即更改行尾。因此,它会在空白中产生这些不需要的大更改,只是没有显示给您。至少对我来说是这样的。:(有关vim/gvim中行尾的全面说明,请参阅。此链接还解释了如何解决此问题。
:%s/\r/\r/g