从 Evil 命令模式使用 'execute-extended-command'(M-x 未定义)

Use 'execute-extended-command' from Evil command mode (M-x is undefined)

我刚开始尝试使用 emacs。作为一个 Vim 用户,我不想在不先安装邪恶模式的情况下使用它。

然而,邪恶模式似乎打破了 'execute-extended-command' (M-x) 的 emacs 键绑定。

我真的不关心这个键绑定,我注意到我可以从邪恶的命令模式调用例如 'list-packages',它工作得很好。 我现在唯一缺少的是命令模式下的 TAB 自动完成功能,例如键入 'list-' TAB,然后它将显示或迭代可用命令。 这在邪恶模式下可行吗?

或者最终是否有一种简单的方法来修复此键绑定?

我正在使用:

编辑:

我的 .emacs 文件:

(require 'package)
(push '("marmalade" . "http://marmalade-repo.org/packages/")
    package-archives )
(push '("melpa" . "http://melpa.milkbox.net/packages/")
    package-archives)

(add-to-list 'load-path "~/.emacs.d/evil")
(require 'evil)
(evil-mode 1)

(define-key evil-normal-state-map [escape] 'keyboard-quit)
(define-key evil-visual-state-map [escape] 'keyboard-quit)
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)

我尝试添加修饰符-x

(global-set-key (kbd "C-x") 'execute-extended-command)

和 Alt-x

(global-set-key (kbd "A-x") 'execute-extended-command)

但是这些尝试并没有修复键绑定,所以我决定使用超级键

(global-set-key (kbd "s-x") 'execute-extended-command)

修复键盘绑定非常简单 - 只需将此行添加到您的 .emacs 文件(或在暂存缓冲区中评估它):

(global-set-key (kbd "< put your key combination here >") 'execute-extended-command)

您可以使用 reference from ErgoEmacs 了解如何为 kbd 功能提供组合键。

IMO 最好使用标准的 Emacs 方法来执行 运行 命令 - 使用你的 evil-mode 命令模式来处理与邪恶相关的事情,并使用 M-x/execute-extended-command使用 Emacs。