gVim显示回车符(^M),即使文件模式为显式DOS
我在Windows上使用gVim。我的代码在行尾显示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
^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