【问题标题】:emacs query-replace jump to the beginning of bufferemacs query-replace 跳转到缓冲区的开头
【发布时间】:2012-12-28 18:04:59
【问题描述】:

我使用的是 emacs 23.4.1。在大多数情况下,查询替换工作正常,正如预期的那样。但是,有时当我尝试替换缓冲区中间的某些内容并在点之后的第一次出现时键入 y 时,该点会立即跳转到整个缓冲区的第一次出现。例如:

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

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

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

这很烦人,我无法使用一些精确的输入来重现这个问题。但是每次出现,关闭emacs再重新打开就可以解决。有人可以帮帮我吗?

【问题讨论】:

  • 在没有配置的情况下启动 Emacs 时是否会发生这种情况,例如emacs -q?

标签: emacs emacs23


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    query-replace 猜测从哪里开始:

    ... (如果(和瞬态标记模式标记激活) (区域开始))

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          我现在发现了什么:

          按一次 CTRL-space 不会改变任何东西,但按 CTRL-space CTRL-space(因此调用此命令两次 -> 激活标记并停用它)使查询替换再次工作。

          更新:当问题再次出现时,按两次 C-space 没有帮助。所以,这不是解决方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多