7

当您在增量搜索期间打错字并且搜索字符串接收到错误输入的字符时,这并不方便。有没有办法防止这种情况。好像在出错时自动按下了 control-g。

例如,我们有以下文本:

keywords
keys

默认 emacs 行为:

  • 我们开始增量搜索并搜索“keyz”
  • 搜索回显区显示“keyz”,“keywords”中的“key”部分高亮显示
  • 我们按 s
  • 找不到“keys”,光标停留在“keywords”行,搜索回显区显示“keyzs”,不方便

需要的行为:

  • 我们开始增量搜索并搜索“keyz”
  • 搜索回显区域显示“key”,“keywords”中的“key”部分高亮显示
  • 我们按 s
  • 找到并突出显示“键”
4

5 回答 5

3

你可以尝试类似的东西

(defadvice isearch-printing-char (before drop-mismatches-on-next-char activate)
  (while (or (not isearch-success) isearch-error)
    (isearch-pop-state)))
于 2012-12-13T01:56:11.930 回答
2

Emacs 保留了不正确的部分,因为您搜索一个字符串而没有找到它的情况经常发生,但不是因为它不正确,只是在光标之前找到了搜索字符串。在这种情况下,您可以按 Cs 并从文件开头开始搜索,非常方便。

这是非常有用的行为,而且它比错误输入搜索字符串更经常发生在我身上。如果搜索字符串中确实存在错误,那么您只需按 Cg 即可返回上一个正确的搜索字符串。

于 2012-08-29T18:40:05.947 回答
1

我认为问题在于您没有考虑以与 isearch 设计工作方式一致的方式进行搜索,因此您的问题在 isearch 目前存在的上下文中并没有真正意义。

Isearch 确实已经为您提供了您想要的功能,但是您必须通过键入您似乎强烈反对键入的 Cg 来告诉它您希望它发生。如果你不告诉 isearch 你想做什么,当你想让它做什么时,它怎么知道要做什么?

正如@Tom 试图解释的那样,默认方式 isearch 从缓冲区中的当前位置开始,如果您输入了一些失败的字符然后按 Cs,则可以在缓冲区的开头重新启动,这是一个非常有价值的功能。我相信很多人都依赖这种行为。您使用宏始终在缓冲区开头启动 isearch 的方法会使我们许多人感到困惑和困惑,尽管对于像您这样习惯于它的人来说,这当然不是一件坏事。这确实意味着我们其他人对您不喜欢按 Cg 删除不匹配的文本感到非常困惑。

还想一想如果您在启动 isearch 后立即按下第二个 Cs 会做什么(除了会话中的第一次之外的任何时间)(即在您键入任何其他字符之前)。特别注意如果您之前的搜索字符串仅部分匹配当前缓冲区中的某些内容,然后您按 Cg 会发生什么(并注意失败的搜索字符串是如何显示的,无论它是否会部分匹配当前缓冲区中的某些内容或不是)。

还要考虑一下您的功能如何对 multi-isearch-next-buffer-function 的使用产生不利影响。

声称其他编辑器可以做你想让 isearch 在 emacs 中做的事情并不能真正帮助你。

我认为你真正想要的是一些稍微不同类型的搜索功能,它只允许你搜索可以在当前缓冲区中找到的文本,而不是 isearch 搜索任何内容是否该文本恰好存在于当前缓冲与否。

也许 isearch-mode 可以适应你想要它做的事情,但我认为你必须以一种或另一种方式编写一些 elisp 代码。也许您可以将新的搜索模式作为 isearch-mode 中的一个选项来实现,可以像打开和关闭区分大小写的方式一样打开和关闭它;并且可以默认设置,同样可以默认打开或关闭区分大小写。

于 2012-11-13T04:29:15.277 回答
0

如果您在增量搜索过程中出现拼写错误,您只需按退格键即可更正拼写错误。

  • 我们开始增量搜索并搜索“keyz”
  • 搜索回显区显示“keyz”,“keywords”中的“key”部分高亮显示
  • 我们按退格键
  • 我们按 s
  • 找到并突出显示“键”
于 2012-08-23T21:58:26.280 回答
0

与大多数其他答案一样,我只是指出另一个有助于缓解所描述问题的功能。如果您在坏字符之后继续键入几个本来不错的字符,则此字符特别有用。

M-e是用于编辑 isearch 字符串的绑定,在当前字符串没有匹配项的情况下,它很有帮助地将点放置在第一个不匹配的字符上。

因此,如果您犯了一个小错字,您可以快速键入M-e,修复错误,然后RET使用更正的搜索字符串键入以返回 isearch。

于 2012-12-13T11:22:01.383 回答