emacs query-replace跳转到缓冲区的开头

时间:2012-12-28 18:04:59

标签: emacs emacs23

我正在使用emacs 23.4.1。在大多数情况下,查询替换正常工作正常。然而,有时当我尝试在缓冲区中间替换某些东西并为点之后的第一个外观键入y时,该点将立即跳转到整个缓冲区的第一个外观。例如:

foo ------- //开始

bar ------- //在这里使用foo替换bar

foo ------- //在这里输入y,然后跳到开头

这非常烦人,我无法使用一些确切的输入重现这个问题。但每次发生时,关闭emacs并重新打开都可以解决它。有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:2)

另一个观察: 我注意到同样的问题,这个点甚至来回跳了好几次。 我可以通过使用(setq semantic-change-hooks nil)关闭语义更改挂钩来使其消失。 semantic-change-hooks设置为运行语义编辑 - 更改 - 函数 - 句柄 - 更改。 所有这些都发生在semantic-edit.el中,它将语义变化函数添加到变更后的函数中。 简而言之,我无法指出实际的罪魁祸首,但它与语义有关,这也是我最初的怀疑(我想jhh是谁提到了CEDET)。

注意:关闭语义更改挂钩不是解决方案,除非您愿意放弃一些语义功能。

答案 1 :(得分:0)

我只是观察了一下:我正在使用Emacs 23.2.1并遇到与上述相同的问题。所以我在使用选项-q启动emacs时测试了query-replace。然后它工作,所以认为问题的原因是我的“.emacs”。后来我发现第一个实例仍有问题时,以相同“.emacs”开头的第二个emacs实例没有问题。不幸的是,在使用CEDET进行编码,编译一段时间后,问题就会重新出现。毕竟,我现在也无法重现这个问题,也不知道是什么原因造成的。

答案 2 :(得分:0)

query-replace猜测从哪里开始:

...        (if(和transient-mark-mode mark-active)                (区域开头))

为确保标记不在上方,请在开始时键入\C-<SPACE>,即在当前位置设置标记。

答案 3 :(得分:0)

如果我设置了一个标记(在区域之前直接使用C空间,其中要替换的单词在里面),然后调用query-replace命令,它会立即停止,而不会替换任何内容。

答案 4 :(得分:0)

query-replace再次显示了在通过按'y'替换文本中间某处的单词后从头开始搜索要替换的单词的恼人行为。

我现在发现了什么:

按CTRL空格一次不会改变任何内容,只需按CTRL空格CTRL空格(因此调用此命令两次 - &gt;激活标记并停用它)会使查询替换再次起作用。

更新:当问题再次出现时,按两次C空格无济于事。所以,这不是解决方法。