Vim在每行结尾都显示^M
。
如何在Vim中将其替换为正常的换行符?
Vim在每行结尾都显示^M
。
如何在Vim中将其替换为正常的换行符?
:%s/<Ctrl-V><Ctrl-M>/\r/g
<Ctrl-V><Ctrl-M>
表示输入Ctrl+V然后输入Ctrl+M。
:%s
substitute,%=所有行
<Ctrl-V><Ctrl-M>
^M字符(Ctrl-V是Vim写入Ctrl ^字符的一种方式,Ctrl-M在正则表达式后面写入M,导致^M成为特殊字符)
/\r/
有换行符 (\r
)
g
全局执行(不仅在行中的第一次出现)。
:%s/<Ctrl-V><Ctrl-M>/\r/g
(其中 \r 用换行符替换^M)。 - William Turrell在Linux和Mac OS上,以下操作可行:
:%s/^V^M/^V^M/g
其中^V^M
表示按下Ctrl+V,然后按下Ctrl+M。
注意:在Windows上,您可能想使用^Q
代替^V
,因为默认情况下^V
被映射为粘贴文本。
%s/\r/\r/g
命令对于一个只显示行末 ^M
的文件(按照 MacVim 的说法,就是一行很长的文件)能够很好地工作。显然,在这个命令的模式部分和替换部分中,\r
的含义是不同的。 - RichVel在 vim
中,查看文件格式 - DOS 或 Unix:
:set filetype=unix
:set fileformat=unix
该文件将不包含回车符 (CR, ^M) 字符写回。
vi
,你可以像使用 ft
作为 filetype
的快捷方式一样,使用 set ff=unix
来快速设置文件格式。 - Posva:e ++ff=dos
然后输入 :set ff=unix
将会把文本的换行符转换成合理的格式。 - Mateen Ulhaq我使用BBEdit创建的文件在MacVim中显示了一堆^M
换行符,而不是正常的换行符。以下字符串替换解决了这个问题:
:%s/\r/\r/g
这很有趣,因为我用同一字符替换了换行符,但我想 Vim 只需要获取一个新的 \r 才能正确显示。我很想知道这背后的原理。
\r
作为替换字符,但似乎这个操作将所有的\r
字符都替换成了\n
。我并不抱怨,因为这正是我想要的结果,只是有点奇怪。 - donut首先,使用 :set ff?
命令来确定文件的格式。
我猜它可能是 unix
格式,这意味着你的文件使用 fileformat=dos
创建,在行尾添加了 "^M^J",但是在读取时使用的是 fileformat=unix
格式,只删除了行尾的 "^J",而 "^M" 仍然保留。
只需在 Vim 命令行中输入 :e ++ff=dos
,即可将文件格式从 unix 转换为 dos。这应该可以解决问题。如果不行,:%s/\r//g
可以帮助你解决问题。
:e ++ff=dos
,然后输入 :set ff=unix
并保存文件,命令为 :w
。 - Max为了匹配^M字符,我必须可视化地选择它,然后使用操作系统的复制到剪贴板命令来检索它。在尝试替换命令之前,您可以通过搜索该字符来测试它。
/^M
应该选择第一个不良行。
:%s/^M/\r/g
将所有不正确的^M替换为回车符。
这是在基于gvim 7的MacVim中的函数。
编辑:
在我的Windows 10机器上再次遇到此问题,该机器安装了Ubuntu for Windows,我认为这会导致vim文件格式出现问题。在这种情况下,将ff更改为unix、mac或dos除了将^M更改为^J并再次变回去之外,并没有起到任何作用。
解决方案如下:
:%s/\r$/ /g
:%s/ $//g
我采用这种方式的原因是我想确保不对文件造成破坏。我可以使用:%s/\r$//g
命令,但那样会将回车符直接删除,并可能导致意外的结果。相反,我们将单个CR字符(这里是^M字符)转换为空格,然后删除所有行末空格(这对我来说是一个理想的结果)。上述方法都不适用于我,所以我尝试了这个,它起作用了:
键入:%s/
按下CTRL-VCTRL-M
键入//g
按下Enter
因此,在Vim中整体命令应该看起来像:%s/^M//g
这是做什么的::%s
(查找和替换)/^M/
(那个符号)/
(没有字符)g
(全局)。
^M
,而不是用换行符替换它们(vim linux,ff=dos)。这取决于你使用的哪个操作系统 [mac,windows,linux] 以及当前设置的文件格式(请使用 :set ff?
查看)。你是在 Mac 上吗? - RGD2使用Ctrl+V和M获取^M,请注意。
s/^M//g
在不需要使用Ctrl键的情况下:
:%s/\r$//
E486: Pattern not found: \r$
。 - RGD2