2012-04-07 52 views
2

我有一個包含近20列的非常大的文本文件。不幸的是,生成該文件的程序沒有正確處理以-10開頭的列(它只有適當間隔的數據總共有5個字符,而不是6個)。基本上我結束了的東西,看起來像這樣:使用Emacs替換正則表達式保留製表符到製表符

-10.072-10.179-10.2190.002 

我希望它看起來像:

-10.072  -10.179  -10.219  0.002 

,並幾乎能與這樣做:

的Mxreplace-regexpRET-10\....RET\&TABRET

當我使用TAB但是,它只是一個空間,而不是製表符理想的一個片 - 製表位取代。如果我手動轉到文件中的其中一種情況並鍵入TAB它會正確執行製表符到製表符的停止操作以將數據與正確的列對齊。如何保留replace-regexp中的製表符停止功能?

回答

1

查找和替換當然應該是插入一個製表符。當然,選項卡的外觀尺寸可能會有所不同,這是我認爲它看起來像一個空間的唯一原因。您可以使用whitespace-mode使差異更加明顯。

至於tab-to-tab-stop,這是一個動態功能,而不是一種特殊的製表符,所以你不能用搜索和替換。我建議使用鍵盤宏來獲得與手動輸入相同的動態行爲。

  • F3
  • M-C-S-10....RET
  • M-Xtab-to-tab-stopRET
  • F4

或者只是:F3管委會-10....RETTABF4

然後直到它失敗C-0F4

(你可以運行宏如果您只想在緩衝區的一部分上運行它,則可以首先縮小到相關區域。)

不完全正確,因爲Emacs允許您評估任意elisp作爲替換模式的一部分;但這不僅僅是調用製表符到製表符停止函數的一個例子,所以這個宏真的很簡單。