1

在 ansi-term 中工作时,如何让 emacs 仅在我在时突出显示当前行line mode?(而不是在char mode?)。

我目前在每个缓冲区中都(global-hl-line-mode t)激活了(我想要的)。hl-line-mode我只想在char run mode.

4

1 回答 1

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-modehl-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当然,您不仅限于两个这样的名称。

于 2013-03-31T23:40:00.200 回答