^ M字符在Vim中意味着什么?

Max*_*Max 473 unix vim

我一直^M在我的vimrc中获得角色,这打破了我的配置.

Tom*_*zak 527

Unix使用0xA作为换行符.Windows使用两个字符的组合:0xD 0xA.0xD是回车符.^M恰好是vim显示0xD的方式(0x0D = 13,M是英文字母中的第13个字母).

您可以^M通过运行以下命令删除所有字符:

:%s/^M//g
Run Code Online (Sandbox Code Playgroud)

^M被按住进入Ctrl并输入v之后m,然后释放Ctrl.这有时缩写为^V^M,但请注意,您必须按照上一句中的描述输入它,而不是按字面输入.

此表达式将替换所有出现^M的空字符串(即没有).我用它来摆脱^M从Windows复制到Unix(Solaris,Linux,OSX)的文件.

  • @bluesm我实际上需要使用`:%s /\r // g`来替换我文件中的回车符.在我有一堆^ M个字符的文件中找不到^ V ^ M模式. (48认同)
  • 如果文件的行结尾不匹配,您将看到`^ M`字符.使用Tomasz提供的命令,然后键入`:fileformat = {unix | dos | mac}`,具体取决于您要定位的操作系统.如果只有几行没有`^ M`字符,你可能想要`:fileformat = dos`.如果你在vim以外的编辑器中编辑文件,请确保它被配置为匹配行结尾(记事本不会这样做,但任何有信誉的编辑器,如Notepad ++或TextMate都会). (10认同)
  • 如果你在Windows上,Ctrl + V可能会映射到粘贴.如果是这种情况,则默认值会将"特殊字符转义"键重新映射到Ctrl + Q. (9认同)
  • 注意初学者到`vi`,该命令需要手动输入.只需将其粘贴到运行`vi`的开放式终端中,将导致"找不到模式"错误. (9认同)
  • 真正的问题是为什么Vim有时会自动检测到行结尾并正确显示,有时则不然. (8认同)
  • `:%s/^ M // g`和`:%s /\r // g`对我不起作用.返回"找不到模式" (4认同)
  • @MikkelPaulson在GVIM中我需要输入`:set fileformat = {unix | dos | mac}`. (3认同)
  • @jonnybot请注意,不要键入`^ V ^ M`,而是按住`Ctrl`并按`v`后跟`m`,然后释放`Ctrl`. (2认同)
  • 使用 `set ff=unix` 然后在 vim 中手动替换换行符(删除然后重新添加换行符)对我来说效果非常好:D (2认同)

小智 130

:%s/\r//g 
Run Code Online (Sandbox Code Playgroud)

今天为我工作.但我的情况可能略有不同.

  • 很可能需要g选项,因为回车不一定是换行符.在Unix模式下打开时,回车只是另一个字符,当在Windows模式下打开时,回车只是紧跟在换行之后. (6认同)
  • g 选项不是必需的,每行只有一个新行。`:%s/\r//` 就足够了。 (2认同)

Mor*_*ori 63

翻译新行而不是删除它:

:%s/\r/\r/g
Run Code Online (Sandbox Code Playgroud)

  • @PlatinumAzure我不知道为什么没有人想过回答你的问题.`\ r`在搜索部分与替换部分有不同的行为.例如,请参见http://stackoverflow.com/a/3834303/. (12认同)
  • 这实际上应该做什么?对我来说,它看起来像是用 like 替换了 like,我无法想象这会改变什么。我是否遗漏了一些关于这里语法如何工作的特别之处? (2认同)

cni*_*tar 36

这可能意味着你有回车(不同的操作系统使用不同的方式发信号通知行尾).

使用dos2unix固定的文件或设置在vim的fileformats:

set ffs=unix,dos
Run Code Online (Sandbox Code Playgroud)


akr*_*aag 16

假设您的文本文件是 - file.txt,然后运行此命令 -

dos2unix file.txt 
Run Code Online (Sandbox Code Playgroud)

它将文本文件从dos转换为unix格式.


小智 8

在Unix中,使用'tr'命令可能更容易.

cat file1.txt | tr "\r" "\n" > file2.txt
Run Code Online (Sandbox Code Playgroud)


Fre*_*Ben 7

我用sed将它们全部删除了:

sed -i -e 's/\r//g'

也可以用不同的字符串或字符替换:

sed -i -e 's/\r/string/g'


Ant*_*mer 6

我有一个文本文件,最初是通过Mac用户在Windows机器上生成的,需要使用该load data命令将其导入Linux MySQL数据库.

虽然VIM显示'^ M'字符,但上述所有内容都不适合我的特定问题,数据会导入,但总是以某种方式损坏.解决方案最终很容易(经过很多挫折).

解决方案:在同一个文件上执行dos2unix TWICE就可以了!使用该file命令可显示沿途发生的情况.

$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
Run Code Online (Sandbox Code Playgroud)

并且文件的最终版本完美地导入到数据库中.


小智 6

这是在我的情况下唯一有效的方法:

:e ++ff=dos

:wq


ebk*_*ebk 5

如果您没有故意指定不同的fileformat值(例如,:e ++ff=unix对于 Windows 文件),则目标文件很可能具有混合 EOL。

例如,如果一个文件有一些行带有<CR><NL>结尾,其他行也带有 <NL>结尾,并且由 Vim 在读取时自动fileformat设置为,则会出现。在这种情况下,(注意:还有一个额外的) 就会发挥作用。详情请参阅。unix^M (<CR>)fileformatss:help ffs


归档时间:

查看次数:

278331 次

最近记录:

7 年,7 月 前