我一直在使用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中省略了该组;但是,我确实在测试中使用它并仍然得到相同的结果。
答案 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的所有 用户选项 的当前值。