在ansi-term工作时,如果我在line mode
时,如何才能使用emacs突出显示当前行? (而不是char mode
?)。
我目前有(global-hl-line-mode t)
在每个缓冲区(我想要的)中激活hl-line-mode
。我只是想在char run mode
中专门禁用它。
答案 0 :(得分:3)
您可以分两步完成所需的效果。首先,使用以下行替换(global-hl-line-mode t)
文件中的.emacs
:
(add-hook 'after-change-major-mode-hook
'(lambda () (hl-line-mode (if (equal major-mode 'term-mode) 0 1))))
这基本上与使hl-line-mode
成为全局次要模式的做法相同,因为每次缓冲区的主要模式发生变化时它都会打开hl-line-mode
。但如果缓冲区的新主要模式为hl-line-mode
,则它不会打开term-mode
。这样,hl-line-mode
默认禁用ansi-term
。
但是,当您在line-mode
时(但不在char run mode
中)时,您确实希望将其打开。为此,请将以下行添加到.emacs
文件中:
(defadvice term-line-mode (after enable-hl-line-in-term-line-mode)
(hl-line-mode 1))
(defadvice term-char-mode (after disable-hl-line-in-term-char-mode)
(hl-line-mode 0))
根据您使用的Emacs版本,您可能会在迷你缓冲区中遇到上述代码的奇怪行为:每次使用迷你缓冲区时,整行或部分行都可能会突出显示。要解决此问题,请将以下行添加到.emacs文件中:
(add-hook 'minibuffer-setup-hook '(lambda () (hl-line-mode 0)))
这种方法可以让您在hl-line-mode
开启或关闭时具有相当大的灵活性。例如,如果您想要关闭hl-line-mode
的其他主要模式,可以将以上代码的(equal major-mode 'term-mode)
部分替换为:
(member major-mode '(term-mode other-mode1 other-mode2))
其中other-modeN
是您希望hl-line-mode
被禁用的主要模式的名称。当然,你不仅限于两个这样的名字。