Режим Viper во всех режимах

Я перехожу из vi в emacs и, используя viper и vimpulse, становится довольно раздражающим, когда я C-w C-w в окно и не может вернуться к исходному с той же командой, потому что другой буфер, который может быть буфером справки, не находится в режиме Viper. Как я могу это исправить?

Я попытался добавить другие режимы в конфигурацию viper и заставить их запускаться с включенным режимом viper по умолчанию с помощью хуков:

(add-to-list viper-vi-state-mode-list 'help-mode)
(add-hook 'help-mode (lambda () (setq viper-mode t)))

Но ни одна из этих команд не сработала. На самом деле, первая выдала следующую ошибку:

Предупреждение (инициализация): произошла ошибка при загрузке `/home/konrad/.emacs.d/init.el':

Неправильный тип аргумента: символ, (основной режим...

Кроме C-w C-wЯ также скучаю по тому, что не могу ориентироваться с помощью hjkl. Разве нет способа повторно использовать сочетания клавиш, установленные viper, вместо повторного связывания их для каждого режима?

3 ответа

Решение

Посмотрите, что я нашел: http://www.emacswiki.org/emacs/viper-in-more-modes.el

Ошибка в том, что вы забыли процитировать переменную viper-vi-state-mode-list вот так:

(add-to-list 'viper-vi-state-mode-list 'help-mode)

Посмотрите на этот вопрос, почему вам нужно процитировать 'viper-vi-state-mode-list,

Но это не решило проблему для меня, вот как я заставил Cw Cw работать так, как вы хотите:

(define-key help-mode-map (kbd "C-w C-w") 'vimpulse-cycle-windows)

Синтаксис для добавления перехвата в справочный режим будет выглядеть следующим образом:

(add-hook 'help-mode-hook (lambda () (viper-mode t)))

Обратите внимание, что переменная хука называется "-hook", и setq здесь не работает, потому что viper-mode это команда, а не переменная.

Вы можете использовать все режимы для активации Viper:

(add-hook 'fundamental-mode-hook (lambda () (viper-mode t)))

поскольку все режимы наследуются от фундаментального режима.

Другие вопросы по тегам