如何在Emacs的evil模式下保持M-x的传统绑定

3

我正在尝试将execute-extended-command绑定到evil正常模式下的M-x。

我目前有以下代码:

;; evil mode
(require 'evil)
(evil-mode 1)

(define-key evil-normal-state-map "M-x" 'execute-extended-command)

我在我的 .emacs 文件中设置了快捷键,但是它并没有生效。我已经尝试替换快捷键

"M-x"

使用

"\M-x"

并且

(kbd "M-x")

但是两者都没有奏效。我还尝试将它添加到evil.el和evil-maps.el中。

那么你特别想在插入模式下将其他内容映射到 M-x 吗? - mike3996
2个回答

1

我不知道你的绑定有什么问题。你可以使用Emacs自带的global-set-key来进行全局设置,如果你计划在插入模式下进行特殊操作,你可以稍后覆盖它,像这样:

 ;; this works, just tested. My evil is 1.0-dev from github.
 (global-set-key (kbd "M-x") 'smex)
 (define-key evil-insert-state-map (kbd "M-x") 'execute-extended-command)

如果你的绑定中有修改键,可以使用(kdb "")宏。但是无论内容如何,都可以始终使用该宏。以下是示例用法。如果不确定,请将键包装在(kdb )中。

 (global-set-key (kbd "M-x") 'smex)
 (global-set-key (kbd "M-X") 'smex-major-mode-commands)
 ;;(global-set-key (kbd "M-x") 'execute-extended-command)

 (define-key evil-normal-state-map ",d" 'volatile-kill-buffer)
 (define-key evil-normal-state-map ",b" 'ido-switch-buffer)
 (define-key evil-normal-state-map ",s" 'ispell-word)

 (define-key evil-normal-state-map (kbd "C-x g") 'magit-status)
 (define-key evil-insert-state-map (kbd "C-f") 'my-expand-file-name-at-point)
 (define-key evil-insert-state-map (kbd "C-x C-l") 'my-expand-lines)

 (define-key minibuffer-local-map (kbd "C-w") 'backward-kill-word)
 (define-key evil-normal-state-map (kbd ",ff") 'ido-find-file)

0

经过长时间的研究,并在IRC上得到#emacs和#evil-mode频道的帮助,结果发现我的emacs出了问题。它是从http://emacs.naquadah.org/获取的快照。我尝试在另一个emacs版本(来自debian jessies repos)上进行所有操作,结果正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接