在ansi-term中工作时,如何让emacs只在当我在line mode
时突出显示当前行? (而不是在char mode
?)。只在行模式下高亮显示当前行(不在char模式下)
我目前有(global-hl-line-mode t)
它激活hl-line-mode
在每个缓冲区(我想要的)。我只想在char run mode
中专门禁用它。
在ansi-term中工作时,如何让emacs只在当我在line mode
时突出显示当前行? (而不是在char mode
?)。只在行模式下高亮显示当前行(不在char模式下)
我目前有(global-hl-line-mode t)
它激活hl-line-mode
在每个缓冲区(我想要的)。我只想在char run mode
中专门禁用它。
您可以通过两个步骤达到您想要的效果。首先,在你.emacs
文件与以下行替换(global-hl-line-mode t)
:
(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
的缓冲变化的主要模式。但是,如果缓冲区的新主要模式是term-mode
,则它不打开hl-line-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
被禁用。当然,你不仅限于两个这样的名字。
谢谢!嗯,这和我想要的完全相反。其中一部分可能是我的错。我已经更新了OP,使其更加清晰。我希望**仅在**行模式**下突出显示**,而不要在** char模式下**。 在你的代码做相反的事情时(它在** char模式**中将**变成** **并在**行模式**中变为** off **)。 –
@ user815423426真的吗?这很奇怪,我只是将答案中的代码复制并粘贴到我自己的.emacs文件中,并且它可以按照我的预期工作,例如,它在char模式下被关闭*,在line模式下被关闭。在发布初始版本后,我做了一些编辑,你会介意在当前版本中再次尝试一下吗? – Thomas
立即工作。我可能正在使用旧版本的一部分。它的功能就像一个魅力,它使终端工作变得更容易。谢谢! –