1

我对 elisp 很陌生,我试图定义一个函数来设置搜索时的突出显示行为。目标是: 之后i-search,我希望能够用 清除突出显示C-g,但如果按 Enter 键,我希望保留突出显示。

所以我在我的init.elas 中定义了一个函数:

(defun keyboard-quit-cleanup ()
  "clean up highligh after keyboard quit"
  (keyboard-quit)
  (lazy-highlight-cleanup))
(global-set-key (kbd "C-g") '(keyboard-quit-cleanup))

但是,它不起作用。这里有什么问题?

谢谢!

4

1 回答 1

5

很多事情,我害怕:)

  1. global-set-key的坏了:

    (global-set-key (kbd "C-g") 'keyboard-quit-cleanup)
    

    不是:

    (global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
    

    (你在哪里看到的??)

  2. 您的自定义函数不是交互式命令,因此您无法将其绑定到键。它需要是:

    (defun keyboard-quit-cleanup ()
      "Clean up highlights after keyboard quit."
      (interactive)
      ...)
    
  3. 您可能想使用FORCE参数lazy-highlight-cleanup

  4. 你绑定了错误的东西。

    C-g绑定isearch-abortisearch-mode-map键盘映射中。

    (编辑:根据 Tripleee 的评论,搞乱全局绑定肯定是个坏主意。肯定有一些与之相关的特殊行为,你不想冒险破坏它。)

  5. 当您希望为标准行为添加额外的行为时,您可能想要使用钩子(根据偏好)或一些建议。在这种情况下,我们可以使用一个方便的钩子。

    C-hv isearch-mode-end-hook RET

    (add-hook 'isearch-mode-end-hook 'my-isearch-end)
    (defun my-isearch-end ()
      "Custom behaviours for `isearch-mode-end-hook'."
      (when isearch-mode-end-hook-quit
        (lazy-highlight-cleanup t)))
    

(我假设您已lazy-highlight-cleanup设置为nil正常,否则默认情况下会进行清理。)

于 2013-05-29T04:34:34.893 回答