Отключение злого режима для Nav в Emacs? Или любые буферы только для чтения?

Я пытаюсь получить что-то вроде Nerd Tree в Emacs и нашел Nav, который похож на основной файловый навигатор emacs, и мне это подходит.

Проблема заключается в том, что когда я открываю Nav и переключаюсь в свой буфер, режим зла по-прежнему включен, и я должен нажать C-z, если я хочу использовать какие-либо команды Nav (например, . для nav-toggle-hidden-files), И меня это раздражает.

Прошло несколько часов, я пытаюсь исправить эту проблему, вставив

(require 'evil)
    (evil-mode 0)

везде в файлах Nav, но, очевидно, я делаю это неправильно. И я уверен, что это произойдет снова при использовании других плагинов. Как это сделать?

Ответ 1

Вы хотите, чтобы буферы nav-mode открывались в состоянии Emacs, а не в нормальном состоянии Evil. Я не знаю, что на самом деле вызывается nav-mode, но выполните следующие действия, соответственно изменив имя режима:

(add-to-list 'evil-emacs-state-modes 'nav-mode)

Ответ 2

Как описано в злой вики здесь, вы можете проверить состояние зла-set-initial-state.

Здесь соответствующая часть моей конфигурации emacs:

(evil-set-initial-state 'ibuffer-mode 'normal)
(evil-set-initial-state 'bookmark-bmenu-mode 'normal)
(evil-set-initial-state 'dired-mode 'emacs)
(evil-set-initial-state 'sunrise-mode 'emacs)

Не облегчает тот факт, что я действительно хотел бы иметь привязки клавиш vim в этих режимах, однако...

Ответ 3

Что вам нужно, так это "hook", который сообщит Emacs, в каких условиях вы хотите, чтобы какой-либо конкретный режим был активным или нет.

Я не использую режимы evil или nav, но вам нужно что-то очень похоже на следующую строку в .emacs:

(add-hook 'nav-mode-hook 'disable-evil-mode)

Эта команда сообщает Emacs, что, когда режим (чьи крючки указаны в nav-mode-hook) активен, запустите функцию disable-evil-mode. Вероятно, вам придется изменить имя списка крючков или имя функции обратного вызова в соответствии с тем, как реализованы nav-mode и evil-mode.

nav-mode-hook - это мое предположение, что nav-mode будет называть его список крючков. Если это не сработает, проверьте документацию nav-mode, найдите, как добавить крючки.

disable-evil-mode - это любая функция, которую вы вызываете для отключения режима зла. Проверьте документацию злого режима для имени фактической функции.