2016-11-12 86 views
0

我是新的emacs,我想知道我們如何禁用高光線模式(global-hl-line-mode),當我們在邪惡模式的視覺模式。我發現當我們開始選擇一個激活了hl行的塊時,即使它們的背景顏色不同,我也很困惑。 當然,我們希望在離開VISUAL模式時再次激活hl線模式。謝謝。在視覺模式下禁用高光線(邪惡模式)

編輯:我試過這一個,我終於能夠在VISUAL模式下禁用HL線。

(添加鉤「惡可視狀態進入鉤(拉姆達() (setq本地全局HL-行模式 無)))

但我無法啓用它時我離開。我試過,但沒有奏效:

(添加鉤「惡可視狀態退出鉤(拉姆達() (全球HL-行模式1)))

編輯:請不要介意,其實這工作: (添加鉤「惡可視狀態進入鉤(拉姆達() (setq本地全局HL-行模式 無)))

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

回答

0

可能會更好地禁用hl-l INE模式在當前的緩衝區,而不是全局禁止它:

(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)被篡改。

編輯:修復了第二段代碼中的hl-line-mode鉤子。

+0

Thanks @Henrik L.你說得對。其實我打開例如ansi-term時禁用了hl-line模式,所以我不想在離開視覺模式後啓用hl-line(我沒有注意到)。但上面的代碼片段似乎不起作用。當我進入視覺模式時,HL線仍然存在... –

+0

@WalidBer我的壞!第二個片段中有一個錯誤。 hl-line鉤子中的if語句錯誤地檢查了「was -hl-line-mode-on」而不是「hl-line-mode」。我修復了它。它現在應該工作。 –