【问题标题】:Dealing with \r \n ^M ^@ in text files using vim使用 vim 处理文本文件中的 \r \n ^M ​​^@
【发布时间】:2012-12-05 15:57:19
【问题描述】:

当我将 excel 文件中的数据行保存为制表符分隔的 .txt 文件,然后在 VIM 中打开这些文件时,我发现曾经在 excel 中的多行文件现在在 VIM 中变成了单行文件。

可以在 VIM 中使用一些替换命令来分隔“行”:

%s/^M/\r\n/g

在此之后,“行”现在由 ^@ 分隔。 我使用另一个替换命令来处理它:

%s/^@//g

我的问题是:

  1. 为什么我的多行 txt excel 文件在 VI 中打开为单行?
  2. 什么是^@
  3. 有没有更好的方法来“修复”我的 txt 文件?

【问题讨论】:

  • 我看到 ^@ 是某种 Vi 特定的“空咬”占位符。它是否正确?还是不明白它是从哪里来的……
  • 当你输入:set ff=dos时会发生什么?
  • ff 代表什么?我会试试的。
  • 阅读此处:vim.wikia.com/wiki/File_format。它设置文件格式,因此设置使用的 endline char。 (所以打开文件后立即输入:set ff=dos
  • 我会将其表述为答案。

标签: vim newline carriage-return


【解决方案1】:

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

dos2unix FILE_NAME

这将重新格式化文件的换行符(即它会修改您的文件)。

Mac OS X 上不存在此命令


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

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

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

您可以通过键入 CTRLV 然后键入 CTRLM

来输入 ^M

More reading here

【讨论】:

  • 使用dos2unix FILE_NAME不起作用,该命令无法识别。
  • @eric - 我怀疑它会存在于 Mac 环境中。它确实存在于我的 Cygwin 和 Solaris 环境中。这就是我目前可以检查的全部内容。我对 tr 不是很熟悉,但我确信有一个简单的 sed/tr 等价物……
  • 使用sed -i 's/^M$//' input.txt 给出以下消息:sed: 1: "chr3_F34_map.txt": command c expects \ followed by text
【解决方案2】:

试试这个命令:

    :%s/^M/\r/g

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

【讨论】:

  • 当我使用命令:%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。应该工作。
猜你喜欢
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2022-10-18
  • 2011-04-27
相关资源
最近更新 更多