【问题标题】:Disable highlight-line when in visual mode (evil mode)在视觉模式下禁用高亮线(邪恶模式)
【发布时间】:2017-03-26 20:07:16
【问题描述】:

我是 emacs 的新手,我想知道当我们处于 Evil 模式的 VISUAL 模式时如何禁用高亮线模式 (global-hl-line-mode)。当我们开始选择一个激活了 hl 行的块时,我发现它真的很混乱,即使它们的背景颜色不同。 当然,当我们离开 VISUAL 模式时,我希望再次激活 hl-line-mode。谢谢。

编辑:我试过这个,我终于能够在视觉模式下禁用 hl-line。

(add-hook 'evil-visual-state-entry-hook (lambda() (setq-local global-hl-line-mode 无)))

但我离开时无法启用它。我试过了,但没有用:

(add-hook 'evil-visual-state-exit-hook(lambda() (global-hl-line-mode 1)))

编辑:没关系,这实际上有效: (add-hook 'evil-visual-state-entry-hook (lambda () (setq-local global-hl-line-mode 无)))

(add-hook 'evil-visual-state-exit-hook(lambda() (global-hl-line-mode nil)))

【问题讨论】:

    标签: emacs evil-mode


    【解决方案1】:

    最好在当前缓冲区中禁用 hl-line-mode,而不是全局禁用它:

    (add-hook 'evil-visual-state-entry-hook (lambda() (hl-line-mode -1)))
    (add-hook 'evil-visual-state-exit-hook (lambda() (hl-line-mode +1)))
    

    请注意,如果您不使用global-hl-line-mode,这可能是个问题。 hl-line-mode 将在您每次退出可视模式时启用,无论最初是否启用了 hl-line-mode。这是我为了防止这种情况而一起破解的:

    (defvar-local was-hl-line-mode-on nil)
    (defun hl-line-on-maybe ()  (if was-hl-line-mode-on (hl-line-mode +1)))
    (defun hl-line-off-maybe () (if was-hl-line-mode-on (hl-line-mode -1)))
    (add-hook 'hl-line-mode-hook 
      (lambda () (if hl-line-mode (setq was-hl-line-mode-on t)))))
    
    (add-hook 'evil-visual-state-entry-hook 'hl-line-off-maybe)
    (add-hook 'evil-visual-state-exit-hook 'hl-line-on-maybe)
    

    这种方式hl-line-mode 不会被篡改,除非它事先在缓冲区中被显式激活,例如使用(add-hook 'python-mode-hook 'hl-line-mode)

    编辑:修复了第二个 sn-p 中的 hl-line-mode 钩子。

    【讨论】:

    • 谢谢@Henrik L。你说得对。实际上,当我打开例如 ansi-term 时,我正在禁用 hl-line 模式,所以我不想在离开可视模式后启用 hl-line(我没有注意到)。但是上面的 sn-p 似乎不起作用。当我进入可视模式时,hl-line 仍然存在...
    • @WalidBer 我的错!第二个sn-p有错误。 hl-line 钩子中的 if 语句错误地检查了 was-hl-line-mode-on 而不是 hl-line-mode。我已经修好了。它现在应该可以工作了。
    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    相关资源
    最近更新 更多