我认为问题在于您没有考虑以与 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 中的一个选项来实现,可以像打开和关闭区分大小写的方式一样打开和关闭它;并且可以默认设置,同样可以默认打开或关闭区分大小写。