You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Emacs启用Evil mode后compile命令窗口行为异常问题求助

解决方案

问题根源

该异常是因为Evil模式默认修改了Emacs原生的display-buffer窗口分配规则,对*compilation*这类特殊缓冲区的展示逻辑做了覆盖,才会出现编译缓冲区随机在当前窗口打开、或是额外新建窗口的异常行为。

修复方法

你只需要在你的Emacs配置中加入以下规则,显式指定编译缓冲区的展示逻辑,即可对齐原生Emacs的行为:

  1. 首先强制规定*compilation*缓冲区禁止在当前窗口打开,优先复用已有的其他窗口:
;; 固定*compilation*缓冲区的窗口展示规则
(setq display-buffer-alist
      (cons '("\\*compilation\\*"
              (display-buffer-reuse-window display-buffer-use-some-window)
              (inhibit-same-window . t))
            display-buffer-alist))
  1. 优化你自定义的make-without-asking函数,移除冗余的窗口切换逻辑,避免和Evil的窗口管理规则冲突,修改后函数如下:
(defun make-without-asking ()
  (interactive)
  (compile "build.bat"))
  1. 可选:如果仍有异常,可以额外添加配置,将编译缓冲区的默认Evil状态设为Emacs原生状态,避免状态切换干扰窗口行为:
(evil-set-initial-state 'compilation-mode 'emacs)

将以上配置放在你配置文件中(evil-mode 1)这行的后面,重启Emacs即可生效。

内容的提问来源于stack exchange,提问作者Ali Awan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:24:03