2013-12-14 61 views
1

我一直在使用Emacs一段時間,並嘗試使用冰柱。當我運行命令在Emacs中搜索並替換冰柱

C-C`\([a-z]*\)

S-TAB

C-的序列|x\1y

它變換劃傷緩衝從

;; This buffer is for notes you don't want to save, and for Lisp evaluation. 
;; If you want to create a file, visit that file with C-x C-f, 
;; then enter the text in that file's own buffer. 

;; Xy xy xy xy xy xy xy'xy xy xy xy, xy xy Xy xy. 
;; Xy xy xy xy xy xy xy, xy xy xy xy XY-xy XY-xy, 
;; xy xy xy xy xy xy xy'xy xy xy. 

我的理解是,它應該不是附加一個「x」每個單詞的開頭與' y'到每個單詞的結尾。我在這裏做錯了什麼?我已經用emacs -Q試過了,得到了同樣的結果。另外,icicle-search-replace-literally-flag與其默認值nil相同。我究竟做錯了什麼?謝謝!

編輯:對不起,我在原文中省略了正則表達式中的組;然而,我在測試中使用它,仍然得到相同的結果。

+1

請確保您的文件'icicles-cmd2.el'的版本在2013年12月10日之後發佈。我修正了當天的'\ N'替換錯誤。其他建議:(1)緩慢進行,而不是立即跳入複雜的替換等。**冰柱**搜索和替換與您可能習慣或期望的不同。 (2)檢查所有影響[**冰柱**搜索和替換]的用戶***選項***的當前值(http://www.emacswiki.org/emacs/Icicles_-_Search-And-更換)。 – Drew

+0

修復它。謝謝! – Qudit

+0

如果解決了問題,我建議Drew將評論複製爲答案,然後您接受它。這個問題在概述中被標記爲回答並被接受。如果對某個仍然需要答案的問題進行掃描,這會有所幫助。 – Tobias

回答

1

請確保您的icicles-cmd2.el文件版本的日期是2013-12-10之後。我修正了該日期的錯誤代碼\N

其他建議:

  • 繼續慢慢的,而不是立即跳進複雜的替換等Icicles搜索和替換是從你可能被用於或期望不同。

  • 檢查所有的用戶選項的電流值影響冰柱search and replacement

2

我不使用冰柱,但效果可以與普通的query-replace-regexp重現。

問題是你只是沒有定義你的正則表達式中的任何組,你在替換中引用。因此替換字符串中的組參考\1爲空。

此外,您應該使用[a-z]+而不是[a-z]*,因爲[a-z]*也匹配您可能不想要的空字符串。

把你想要引用的東西放到一個組中,通過版式\(\)包裝它。在你的例子中,正則表達式看起來像\([a-z]+\)。有了這個正則表達式,你可以直接使用替換字符串。

另一種方法是將正則表達式保持原樣並在替換字符串中引用與\&而不是\1的整個匹配。