我在Windows上使用gVim。我的代码在行尾显示^M
个字符。我使用:set ff=dos
无济于事。现有行仍保留^M
个字符,但不会显示我输入的换行符。我已将模式切换为mac(显示^J
个字符)和unix(也显示^M
个字符)并返回dos。有没有人见过这个?
答案 0 :(得分:139)
当你有Windows行结尾和Unix行的结尾时会发生这种情况。如果您有100行,其中99是\ r \ n,其中一行是\ n,您将看到99 ^ M个字符。修复是找到一行并替换它。或者在文件上运行dos2unix。您可以使用以下命令替换Windows行结尾:
:%s/\r\(\n\)/\1/g
答案 1 :(得分:41)
答案 2 :(得分:19)
我通常使用以下内容来清理行结尾:
:g/^M$/s///
要获得ctrl-M我通常输入ctrl-Q,然后按ctrl-M并将其放入。(在某些环境中它可能是ctrl-V然后是ctrl-M。)我不知道为什么,但是我发现比rq更容易记住。
不要忘记做:set ff=dos
,否则你最终还是会使用UNIX行结尾保存。
答案 3 :(得分:15)
我知道这已经得到了解答,但我使用的技巧是
:%s/\r/\r/g
这将使用Windows CRLF替换unix回车。只是添加以防其他人有问题。
答案 4 :(得分:6)
你可以忽略这些字符!
将它放入你的vimrc
匹配Ignore / \ r $ /
答案 5 :(得分:4)
实际上对我有用(在64位窗口,gVIM:7.2)是:
:set ffs=dos
不仅仅是:ff
答案 6 :(得分:4)
在Windows 7上运行Vim 7.3。我使用以下命令:
:%s/^M/\r/g
要创建^ M我输入CTRL + Q,然后按CTRL + M.
答案 7 :(得分:2)
对于你们中的许多人来说,这可能有点简单,但是如果它有用的话,这很有用。
根据richq的回答,我发现这些在我的vimrc中很有用。请注意,第二个通常被注释掉,因为它使dd有点混乱,因为如果它是映射的ex命令,Vim将等待另一个键击计算出来。
function! D2u() execute '%s/\r\(\n\)/\1/g' endfunction "map d2u :%s/\r\(\n\)/\1/g
第一个是通过在编辑模式下按call D2u()
键入D2u
和第二个键来运行。
答案 8 :(得分:2)
这些是额外的CR行结尾,通常是因为在混合的UNIX / DOS系统上使用文件。
从每行的末尾删除单个^ M可能是最短的答案,我使用的是:
:%s/\r
相当于:
:%s/\r//
但不需要结束斜杠(假设它们)。
答案 9 :(得分:0)
尝试了很多东西,但以下工作
:%s/\r/\r/g
注意:如果想要对整个文件产生影响,请使用 g