我对elisp很新,我试图在搜索时定义一个设置突出显示行为的函数.目标是:之后i-search,我希望能够清除突出显示C-g,但是如果我按回车键,我希望保持高亮显示.
所以我在我的定义了一个函数init.el:
(defun keyboard-quit-cleanup ()
"clean up highligh after keyboard quit"
(keyboard-quit)
(lazy-highlight-cleanup))
(global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
Run Code Online (Sandbox Code Playgroud)
然而,它不起作用.这有什么不对?
谢谢!
很多事情,我害怕:)
你global-set-key坏了:
(global-set-key (kbd "C-g") 'keyboard-quit-cleanup)
Run Code Online (Sandbox Code Playgroud)
不:
(global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
Run Code Online (Sandbox Code Playgroud)
(你在哪里看到的?)
您的自定义函数不是交互式命令,因此您无法将其绑定到密钥.它需要是:
(defun keyboard-quit-cleanup ()
"Clean up highlights after keyboard quit."
(interactive)
...)
Run Code Online (Sandbox Code Playgroud)您可能想要使用FORCE参数lazy-highlight-cleanup
你绑定了错误的东西.
C-g必须isearch-abort在isearch-mode-mapkeymap中.
(编辑:根据tripleee的评论,弄乱全局绑定肯定是一个坏主意.肯定有一些与之相关的特殊行为,你不想冒险破坏它.)
当您要为标准行为添加其他行为时,您可能希望使用钩子(根据偏好)或一些建议.在这种情况下,我们可以使用一个方便的钩子.
看到 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)))
Run Code Online (Sandbox Code Playgroud)(我假设您已lazy-highlight-cleanup设置为nil正常,否则默认情况下会进行清理.)