2016-11-12 8 views
0

나는 emacs에 익숙하다. 우리가 하이라이트 라인 모드 (global-hl-line-mode)를 사용하지 못하게하는 방법을 알고 싶다. 비빌 모드의 비주얼 모드. 백그라운드 색상이 다른 경우에도 활성화 된 hl 라인이있는 블록을 선택하기 시작하면 정말 혼란 스럽습니다. 물론, 비주얼 모드를 종료 할 때 hl-line-mode가 다시 활성화되기를 바랍니다. 감사.비주얼 모드 (악의적 인 모드)에서 하이라이트 라인을 사용하지 않음

편집 :이 하나를 시도하고 마침내 비주얼 모드에서 hl 줄을 해제 할 수있었습니다.

(추가 훅 '악마의 영상 상태-항목 훅 (람다() (SETQ 로컬 글로벌 HL-라인 모드 무기 호)))

하지만 나는 그것을 사용하지 수 나는 떠난다. 나는 이것을 시도했지만 작동하지 않았다 :

(추가 훅 '악마의 영상 상태 출구 훅 (람다() (글로벌 HL-라인 모드 1)))

편집을 : 신경 쓸이 실제로 작동 : (애드 훅 '나쁜 영상 상태 엔트리 훅 (람다() (SETQ 로컬 글로벌 HL 라인 모드 닐)))

(애드온 (lambda() ((global-hl-line-mode nil)))

답변

0

hl-l을 사용하지 않는 것이 더 좋을 수도 있습니다 전 세계적으로 사용하지 않도록 설정하기보다는 현재의 버퍼의 오프라인 모드 : 당신이 global-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))) 

참고. 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)로 말하자면, 미리 버퍼에 활성화되지 않는 한 함부로 변경되지 않습니다 이쪽으로.

EDIT : 두 번째 코드 단편에서 hl-line-mode 후크를 수정했습니다.

+0

감사합니다. @Henrik L. 당신 말이 맞습니다. 사실 나는 예를 들어 ansi-term을 열 때 hl-line 모드를 비활성화합니다. 그래서 시각 모드를 종료 한 후 hl-line을 enabe하고 싶지 않습니다. 그러나 위의 발췌 문장은 작동하지 않는 것 같습니다. 내가 비주얼 모드로 들어가면, hl-line은 여전히 ​​거기에있다. –

+0

@WalidBer 내 잘못이야! 두 번째 스 니펫에 실수가있었습니다. hl-line hook의 if 문은'hl-line-mode' 대신'was-hl-line-mode-on'을 잘못 검사했습니다. 나는 그것을 고쳤다. 이제는 효과가있다. –