我试图让 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 的回答进行评论,但我目前没有足够的声誉来这样做。)