Emacs启用Evil mode后compile命令窗口行为异常问题求助
解决方案
问题根源
该异常是因为Evil模式默认修改了Emacs原生的display-buffer窗口分配规则,对*compilation*这类特殊缓冲区的展示逻辑做了覆盖,才会出现编译缓冲区随机在当前窗口打开、或是额外新建窗口的异常行为。
修复方法
你只需要在你的Emacs配置中加入以下规则,显式指定编译缓冲区的展示逻辑,即可对齐原生Emacs的行为:
- 首先强制规定
*compilation*缓冲区禁止在当前窗口打开,优先复用已有的其他窗口:
;; 固定*compilation*缓冲区的窗口展示规则 (setq display-buffer-alist (cons '("\\*compilation\\*" (display-buffer-reuse-window display-buffer-use-some-window) (inhibit-same-window . t)) display-buffer-alist))
- 优化你自定义的
make-without-asking函数,移除冗余的窗口切换逻辑,避免和Evil的窗口管理规则冲突,修改后函数如下:
(defun make-without-asking () (interactive) (compile "build.bat"))
- 可选:如果仍有异常,可以额外添加配置,将编译缓冲区的默认Evil状态设为Emacs原生状态,避免状态切换干扰窗口行为:
(evil-set-initial-state 'compilation-mode 'emacs)
将以上配置放在你配置文件中(evil-mode 1)这行的后面,重启Emacs即可生效。
内容的提问来源于stack exchange,提问作者Ali Awan
相关产品推荐
相关产品推荐

