emacs - 邪恶的模式特定或缓冲区本地文本对象?

标签 emacs evil-mode

问:在 Emacs 中,如何为 evil 中的文本对象创建特定于模式的键绑定(bind)?

可以在特定模式下绑定(bind)特定状态(正常、插入等)的键,如以下示例所示:

(evil-define-key 'normal org-mode "a" 'some-command)

但是,我不清楚如何以特定于模式的方式将键绑定(bind)到 evil-outer-text-objects-map (或其 -inner- 对应物)。作为替代方案,也不清楚如何通过模式 Hook 以缓冲区本地方式绑定(bind)这些映射中的键。

看起来不像 evil-local-set-key会这样做,因为它需要一个状态(正常、插入等)作为它的第一个参数,而这与这个任务无关。

也不清楚如何使用local-set-key在这种情况下,因为它需要一个键和一个命令作为参数,但不将映射作为参数。

最佳答案

这有点晚了,但是对于您问题的第一部分,您可以使用本地 map ,例如:

(defun my-elisp-mode-configuration ()
  (with-eval-after-load 'evil
    (define-key evil-visual-state-local-map "ie" 'sp-evil-i-sexp)
    (define-key evil-operator-state-local-map "ie" 'sp-evil-i-sexp)))

(add-hook 'emacs-lisp-mode-hook #'my-elisp-mode-configuration)

在此示例中,我将 'inner' e 运算符绑定(bind)到自定义 sp-evil-i-sexp 文本对象,仅用于 elisp 模式。

来回答你的第二个问题; evil 会覆盖本地 map ,因此使用 local-set-key 是不够的。相反,您可以使用:
  • 带有钩子(Hook)的局部邪恶 map ;就像前一个例子中的 evil-normal-state-local-map
  • 使用邪恶定义键;即:(evil-define-key 'normal emacs-lisp-mode-map (kbd " ") 'my-leader)请注意,您不能以这种方式覆盖 Evil 的绑定(bind),但只能在全局或本地级别上覆盖那些失业或受雇的绑定(bind)。如果您想覆盖 Evil 绑定(bind),请使用第一种方法。
  • 还有evil-make-overriding-map这会导致 local-map 覆盖 Evil 的绑定(bind),但这很少是您想要的,因为您希望 hjkl 至少可以工作,但对于诸如 dired 之类的模式很有用,而这使得 evil 不太有意义。

  • 脚注:从 Emacs 的角度来看,Evil 的操作符或文本对象没有什么特别之处。它们只是绑定(bind)的键盘映射。例如: i 键绑定(bind)到 evil-inner-text-objects-map,其中包括像 w 这样的文本对象:
    (define-key evil-visual-state-map "i" evil-inner-text-objects-map)
    (define-key evil-inner-text-objects-map "w" 'evil-inner-word)
    

    您可以在 evil-maps.el 中找到这些行

    关于emacs - 邪恶的模式特定或缓冲区本地文本对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25463369/

    相关文章:

    emacs - 如何在 emacs evil-mode 下保持 M-x 上的传统绑定(bind)

    Emacs:启用 CUA 模式时如何重新定义 Ctrl-Enter?

    emacs - 暂时禁用 Spacemacs 中的 Vim 键绑定(bind)

    emacs - Slime\Emacs comint 在启动 mpi 进程时挂起

    emacs - lex/flex/yacc/bison文件是否有良好的Emacs模式或方法?

    Emacs - evil-mode 导致 eldoc 模式闪烁

    vim - 邪恶的 Emacs 模式 : sentence motions and other questions

    Emacs:禁用所有 Lisp 缓冲区的特定次要模式

    emacs - 如何设置 shell-command-on-region 输出的编码?

    emacs - 如何选择用于 emacs 的方案?