使用Emacs replace-regexp保留制表符到制表符

时间:2012-04-07 06:16:57

标签: emacs

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

-10.072-10.179-10.2190.002

我希望它看起来像:

-10.072     -10.179     -10.219     0.002

并且几乎能够这样做:

Mx replace-regexp RET -10\.... RET \& TAB RET

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

1 个答案:

答案 0 :(得分:1)

搜索和替换肯定应该插入一个标签。当然,标签的外观尺寸可能会有所不同,这是我能想到它看起来像是一个空间的唯一原因。您可以使用whitespace-mode来改善差异。

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

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

或者只是: F3 MCs -10.... RET TAB F4

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

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

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