Emacs 编译模式始终使用 visual-line-mode

Emacs 编译模式始终使用 visual-line-mode

我试图让 emacs 编译模式始终使用 visual-line-mode。我使用的代码是:

(add-hook 'compilation-mode-hook (visual-line-mode))

我尝试了其他各种排列。例如以下版本:

或者全局启用视觉线路模式

(setq-default global-visual-line-mode t) 

然而 emacs 坚持要截断行。我已确认钩子正在执行。有没有已知的解决方案?

更新 0

主要问题是 Lisp 新手的问题:该函数visual-line-mode未引用。这导致立即求值,而不是在触发钩子时求值。

这并没有解决问题:编译模式仍然不会换行。我已经确认钩子正在通过放置未定义的标识符而不是 来在预期的时间执行t。正如预期的那样,当进入编译模式时,Emacs 会抱怨未定义的标识符。

有没有办法跟踪 的执行情况compile?使用(trace-function 'compile)产生:

======================================================================
1 -> compile: command="make" comint=nil
1 <- compile: #<buffer *compilation*>

仅此而已。

更新 1

解决了!

除了不正确的引用之外,问题还出在我的 emacs 配置的另一部分:

(add-hook 'after-change-major-mode-hook
      (function
        (lambda ()
            (fci-mode)
            (turn-on-auto-fill)
        )
      )
)

这实际上解除了visual-line-mode设置!

答案1

lawlist 提供的答案是正确的,但是,还有一些编译次要模式被一些主要模式使用(例如 CIDER 的 stacktrace-mode)。因此,我有以下内容:

(add-hook 'compilation-mode-hook
          (lambda () (visual-line-mode 1)))

(add-hook 'compilation-minor-mode-hook
          (lambda () (visual-line-mode 1)))

我提到这一点是因为次要代码在状态栏上也显示为“编译”,我花了一段时间才弄清楚它是次要模式,而不是主要模式。

(我本来想简单地对 lawlist 的回答进行评论,但我目前没有足够的声誉来这样做。)

相关内容