用Ecicles搜索和替换Emacs

时间:2013-12-14 06:38:31

标签: search emacs replace icicles

我一直在使用Emacs一段时间,我正在尝试Icicles。当我运行命令序列

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

S-TAB

C- | x\1y

它从

转换 scratch 缓冲区
;; 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相同。我究竟做错了什么?谢谢!

编辑:对不起,我在原帖中的regexp中省略了该组;但是,我确实在测试中使用它并仍然得到相同的结果。

2 个答案:

答案 0 :(得分:2)

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

问题在于,您只是不在正则表达式中定义您在替换中引用的任何组。因此,替换字符串中的组引用\1为空。

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

将要引用的内容放入一个组中,通过paranthesis \(\)进行包装。在您的示例中,正则表达式看起来像\([a-z]+\)。使用此正则表达式,您可以直接使用替换字符串。

另一种方法是保留正则表达式,并在替换字符串中使用\&而不是\1引用整个匹配。

答案 1 :(得分:1)

请确保您的文件版本icicles-cmd2.el在2013-12-10之后过期。我在那个日期修复了\N替换的错误。

其他建议:

  • 慢慢进行,而不是立即跳入复杂的替换等。Icicles搜索和替换与您可能习惯或期望的不同。

  • 检查影响 Icicles search and replacement的所有 用户选项 的当前值。