使用vim处理文本文件中的\r\n ^M^@

使用vim处理文本文件中的\r\n ^M^@,vim,newline,carriage-return,Vim,Newline,Carriage Return,当我将excel文件中的数据行保存为制表符分隔的.txt文件,然后在VIM中打开这些文件时,我看到excel中曾经是多行文件的内容现在是VIM中的单行文件 可以使用一些替换命令在VIM中分离“线”: %s/^M/\r\n/g 在此之后,“行”现在由^@分隔。 我使用另一个替换命令来处理它: %s/^@//g 我的问题是: 为什么我的多行txt excel文件在VI中作为单行打开 什么是^@ 有没有更好的方法“修复”我的txt文件 请尝试以下命令: :%s/^M/\r/g \r是vi

当我将excel文件中的数据行保存为制表符分隔的.txt文件,然后在VIM中打开这些文件时,我看到excel中曾经是多行文件的内容现在是VIM中的单行文件

可以使用一些替换命令在VIM中分离“线”:

%s/^M/\r\n/g
在此之后,“行”现在由
^@
分隔。 我使用另一个替换命令来处理它:

%s/^@//g
我的问题是:

  • 为什么我的多行txt excel文件在VI中作为单行打开
  • 什么是
    ^@
  • 有没有更好的方法“修复”我的txt文件
  • 请尝试以下命令:

        :%s/^M/\r/g
    

    \r
    是vim使用的回车符。
    ^M
    字符是按字面意思显示的换行符。

    您通常可以通过运行以下命令来解决此类问题:

    dos2unix文件名

    这将在适当位置重新格式化文件的换行符(即它将修改文件)

    (此命令在Mac OS X上不存在)


    如果您没有dos2unix(如您在Mac上),您可以使用sed:

    sed的/^M$/'input.txt>output.txt

    如果希望通过执行替换来避免创建新文件,也可以使用
    sed-i

    您可以输入
    ^M
    ,方法是键入CTRLV,然后键入CTRLM


    我看到^@是某种特定于Vi的“空咬”占位符。这是正确的吗?仍然不知道它来自哪里…当您键入
    :set ff=dos
    时会发生什么?ff代表什么?我试试看。看这里:。它设置文件格式,从而设置所使用的结束行字符。(因此,在打开文件后立即键入
    :设置ff=dos
    )我将把它作为一个答案。当我使用命令
    :%s/^M/\n/g
    时,我会收到一条错误消息,上面写着“找不到图案”。但是,如果我使用
    :%s/^M/\r\n/g
    ,然后再使用
    :%s/^@//g
    ,它是有效的。excel和vim使用的是什么操作系统?嗨,我对excel和vim都使用mac OS 10.7.5 Lion。是的,因为所有操作都是在mac上完成的,第一个建议就行不通了。我假设excel在windows上运行。关于第二部分,请尝试
    :%s/^M/\r/g
    。应该可以。使用
    dos2unix文件名
    无效,无法识别该命令。@eric-我怀疑它是否存在于Mac环境中。它确实存在于我的Cygwin和Solaris环境中。这就是我目前所能查到的。我对tr不是很熟悉,但我确信有一个简单的sed/tr等价物…使用
    sed-I's/^m$/'input.txt
    会给出以下消息:
    sed:1:“chr3\u F34\u map.txt”:命令c预期\后跟文本。