问:在 Emacs 中,如何为 中的文本对象创建特定于模式的键绑定evil?
可以在特定模式下将键绑定到特定状态(正常、插入等),如下例所示:
(evil-define-key 'normal org-mode "a" 'some-command)
Run Code Online (Sandbox Code Playgroud)
但是,我不清楚如何以特定于模式的方式将密钥绑定到evil-outer-text-objects-map(或其-inner-对应项)。作为替代方案,也不清楚如何通过模式挂钩以缓冲区本地方式绑定这些映射中的键。
它看起来不evil-local-set-key会这样做,因为它期望一个状态(正常、插入等)作为其第一个参数,而这与此任务无关。
还不清楚如何local-set-key在这种情况下使用,因为它需要一个键和一个命令作为参数,但不将映射作为参数。
小智 2
在阅读邮件列表时,有人提到最好放置键绑定eval-after-load而不是挂钩,所以这里是:
(eval-after-load "<mode>"
'(progn
<object-definition>))
Run Code Online (Sandbox Code Playgroud)
至于定义新的文本对象,我必须推荐@gordon-gustafson的这个函数:
(defmacro define-and-bind-text-object (key start-regex end-regex)
(let ((inner-name (make-symbol "inner-name"))
(outer-name (make-symbol "outer-name")))
`(progn
(evil-define-text-object ,inner-name (count &optional beg end type)
(evil-select-paren ,start-regex ,end-regex beg end type count t))
(evil-define-text-object ,outer-name (count &optional beg end type)
(evil-select-paren ,start-regex ,end-regex beg end type count nil))
(define-key evil-inner-text-objects-map ,key (quote ,inner-name))
(define-key evil-outer-text-objects-map ,key (quote ,outer-name)))))
Run Code Online (Sandbox Code Playgroud)
所以这<object-definitions>部分将变成:
(define-and-bind-text-object "<key>" "<start-regex>" "<end-regex>")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |