Режим 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)))
поскольку все режимы наследуются от фундаментального режима.