Emacs evil-mode, как автоматически изменить состояние insert-state в emacs-state
Мне не нравится состояние insert, поэтому я хочу заменить его emacs-state. Но этот параметр не работает:
(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)
После нажатия o или cw, я все еще в состоянии insert.
Ответы
Ответ 1
Расскажи мне, как это работает. Это взлом, который в основном заменяет функцию evil-insert-state
на evil-emacs-state
. Проблема заключается в том, как выйти из состояния emacs с помощью клавиши escape. Например, эта версия отлично работает, когда я выхожу из состояния emacs с помощью клавиши ESC
, но не тогда, когда я пытаюсь сделать то же самое с C-[
:
; redefine emacs state to intercept the escape key like insert-state does:
(evil-define-state emacs
"Emacs state that can be exited with the escape key."
:tag " <EE> "
:message "-- EMACS WITH ESCAPE --"
:input-method t
;; :intercept-esc nil)
)
(defadvice evil-insert-state (around emacs-state-instead-of-insert-state activate)
(evil-emacs-state))
Ответ 2
Как насчет этого подхода:
(setq evil-insert-state-map (make-sparse-keymap))
(define-key evil-insert-state-map (kbd "<escape>") 'evil-normal-state)
Я использую его, и, похоже, это трюк. И поскольку вы не меняете состояние, вы сохраняете связанные с состоянием конфигурации, такие как цвет курсора и т.д.
Ответ 3
Удивленный никто не опубликовал это еще...
(defalias 'evil-insert-state 'evil-emacs-state)
Все, что пытается вызвать evil-insert-state
, просто вызовет evil-emacs-state
. Работает для i, a, o, O и т.д.
Ответ 4
Если точка заключается в том, что вы хотите использовать нормальное редактирование Emacs при выполнении задач vi, в которых используется режим вставки, то это позволяет выполнить очистку словаря в режиме вставки. Вероятно, желательно, чтобы клавиша ESC вернула вас в нормальный режим и C-z попала в состояние Emacs; Лев Алексеев опубликовал небольшой бит кода, который делает это:
(setcdr evil-insert-state-map nil)
(define-key evil-insert-state-map
(read-kbd-macro evil-toggle-key) 'evil-emacs-state)
который я использую и как. Существует два потенциальных недостатка в режиме вставки, а не в режиме emacs:
- Вы не можете использовать клавишу ESC как другой, префиксный способ ALT-keymapping; и
- Существует риск (поэтому мне говорят, хотя я этого не встречал), если вы получаете доступ к Emacs через tty, Emacs будет интерпретировать ALT-модифицированные ключи как ESC, за которым следует символ, что дает разницу в в режиме вставки, чем в режиме emacs.
Я не думаю, что проблема серьезная.
Ответ 5
Из документации о evil-emacs-state-entry-hook
:
Крючки для запуска при входе в состояние Emacs.
Таким образом, функция evil-emacs-state
запускается при вводе emacs-state
(с помощью C-z).
Вы можете, однако, сделать это:
(define-key evil-normal-state-map (kbd "i") 'evil-emacs-state)
Теперь проблема заключается в выходе из состояния emacs. Я помню, что в emacs были проблемы с привязкой ESC
, поскольку ESC
используется как META
, а (IIRC) Evil использует некоторый "специальный" код для перехвата ключа ESC
.
EDIT: после вашего комментария: этот должен работать:
(fset 'evil-insert-state 'evil-emacs-state)
Ответ 6
Теперь у Зла есть способ сделать это
(setq evil-disable-insert-state-bindings t)
перед загрузкой зла
Ссылка: https://github.com/noctuid/evil-guide#use-some-emacs-keybindings