2

我有一个非常大的文本文件,有近 20 列。不幸的是,生成该文件的程序没有正确处理以 -10 开头的列(它只正确间隔了总共有 5 个字符,而不是 6 个字符的数据)。本质上,我最终得到了如下所示的东西:

-10.072-10.179-10.2190.002

我希望它看起来像:

-10.072     -10.179     -10.219     0.002

并且几乎能够做到这一点:

M-x replace-regexp RET -10\.... RET \&TAB RET

但是,当我使用TAB它时,它只替换为空格而不是制表符——理想情况下是制表符到制表符。如果我手动转到文件中的这些情况之一并TAB正确键入它,则会执行制表位到制表位以将数据与正确的列对齐。如何在替换正则表达式中保留制表符停止功能?

4

1 回答 1

1

搜索和替换当然应该插入一个标签。当然,选项卡的外观大小可能会有所不同,这是我能想到的唯一原因,因为它看起来是一个空格。您可以使用whitespace-mode使差异更加明显。

至于tab-to-tab-stop,这是一个动态函数,而不是一种特殊的制表符,所以你不能通过搜索和替换1来做到这一点。我建议改用键盘宏,以获得与手动输入相同的动态行为。

  • F3
  • M-C-s -10.... RET
  • M-x tab-to-tab-stop RET
  • F4

或者也许只是:F3M-C-s -10.... RETTABF4

然后你可以运行宏,直到它失败C-0F4

(如果您只想在缓冲区的一部分上运行它,您可以简单地先缩小到相关区域。)

1不完全正确,因为 Emacs 允许您将任意 elisp 评估为替换模式的一部分;但这不仅仅是调用 tab-to-tab-stop 函数的情况,因此宏确实要简单得多。

于 2012-04-07T07:41:03.943 回答