在 ansi-term 中工作时,如何让 emacs 仅在我在时突出显示当前行line mode
?(而不是在char mode
?)。
我目前在每个缓冲区中都(global-hl-line-mode t)
激活了(我想要的)。hl-line-mode
我只想在char run mode
.
在 ansi-term 中工作时,如何让 emacs 仅在我在时突出显示当前行line mode
?(而不是在char mode
?)。
我目前在每个缓冲区中都(global-hl-line-mode t)
激活了(我想要的)。hl-line-mode
我只想在char run mode
.
分两步就可以达到你想要的效果。首先,(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 版本,您可能会在使用上述代码的 minibuffer 中遇到奇怪的行为:每次使用 minibuffer 时,整行或部分行都可能会突出显示。要解决此问题,还将以下行添加到您的 .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
当然,您不仅限于两个这样的名称。