2

我每天使用 i-search 向前/向后一百万次,但我仍然没有弄清楚如何确定焦点是否仍在 minibuffer 中。

我相信我的困惑源于搜索失败,然后尝试修改搜索参数,即由于焦点已经离开小缓冲区而错误地修改了文档——但是,我被骗以为小缓冲区仍然处于活动状态因为我的搜索词仍然显示 - 例如,

  • Failing wrapped I-search backward: abcdefg

  • Failing overwrapped I-search: abcedfg

  • Wrapped I-search: abcedfg

  • Overwrapped I-search backward: abcefg

  • Failing wrapped I-search: abcedfg

关于如何向前/向后调整/修改 i-search 以防止这种情况发生的任何想法?

也许只要 isearch 处于活动状态,文档模式行可能会变为非活动状态,并且一旦 isearch 函数完成,模式行就会更新为活动状态。也许还有一条消息——“isearch 函数已退出。”

我当时正在考虑在我搜索时将我的文档设为只读,但这当然是矫枉过正。

任何建议将不胜感激。

4

2 回答 2

2

问题是,在 isearch 期间焦点不在minibuffer 中,除非您用于M-e编辑搜索字符串;它在您的文档中。我绝对是一个欣赏大量上下文提示的人,但我从未发现 isearch 指示不足(Isearch在模式行中,I-search:在其下方,突出显示活动搜索结果,突出显示其他搜索结果)。

例如,当您使用RET退出 isearch 时,状态行会显示“标记保存在搜索开始的位置”。除非您已设置search-edit-option为非默认值,否则除了 isearch 特定命令或键入之外的任何内容都将退出搜索。

如果您确实想要更多关于正在进行的 isearch 的指示,您可以使用isearch-mode-hookand isearch-mode-end-hook。例如,要更改模式行颜色:

(add-hook 'isearch-mode-hook
          (lambda ()
            (set (make-local-variable 'isearch-mode-line-face-remap-cookie)
                 (face-remap-add-relative
                  'mode-line '((:foreground "ivory" :background "red") mode-line)))))

(add-hook 'isearch-mode-end-hook
          (lambda ()
            (face-remap-remove-relative isearch-mode-line-face-remap-cookie)))

或者,如果这仍然不够高可见性,您可以更改缓冲区文本的背景颜色:

(add-hook 'isearch-mode-hook
          (lambda ()
            (set (make-local-variable 'isearch-default-face-remap-cookie)
                 (face-remap-add-relative
                  'default '((:background "yellow") default)))))

(add-hook 'isearch-mode-end-hook
          (lambda ()
            (face-remap-remove-relative isearch-default-face-remap-cookie)))

顺便说一句,如果您还没有尝试过,C-h m请在isearch; 有很多绑定可以让您自定义您的搜索,而我在使用 Emacs 的前 15 年中并没有意识到这些。

于 2013-10-20T02:49:33.293 回答
2

@NicholasRiley 很好地澄清了事情。补充一点,以防有帮助:

  • Isearch+(库`isearch+.el)使用模式行和 Isearch 提示来显示有关搜索状态的更多信息:

    • 区分大小写在模式行中指示minor-mode较轻:ISEARCH为不区分大小写;Isearch区分大小写。

    • 当搜索结束时,打火机会突出显示。

    • 提示的某些部分被突出显示,以指示搜索的类型:正则表达式、单词、多缓冲区以及搜索是否环绕缓冲区。

  • 使用 library oneonone.el,独立 minibuffer 帧的背景在 Isearch 期间具有不同的颜色。即使您不想要独立的 minibuffer,一般的想法也可能会有所帮助。它使用这些钩子:

(add-hook 'isearch-mode-hook     '1on1-color-isearch-minibuffer-frame)
(add-hook 'isearch-mode-end-hook '1on1-color-minibuffer-frame-on-exit)
(add-hook 'minibuffer-setup-hook '1on1-color-minibuffer-frame-on-setup)
(add-hook 'minibuffer-exit-hook  '1on1-color-minibuffer-frame-on-exit)
于 2013-10-20T03:34:24.993 回答