Мне не нравится состояние insert, поэтому я хочу заменить его emacs-state. Но этот параметр не работает:
(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)
После нажатия o или cw, я все еще в состоянии insert.
Мне не нравится состояние insert, поэтому я хочу заменить его emacs-state. Но этот параметр не работает:
(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)
После нажатия o или cw, я все еще в состоянии insert.
Расскажи мне, как это работает. Это взлом, который в основном заменяет функцию 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))
Как насчет этого подхода:
(setq evil-insert-state-map (make-sparse-keymap))
(define-key evil-insert-state-map (kbd "<escape>") 'evil-normal-state)
Я использую его, и, похоже, это трюк. И поскольку вы не меняете состояние, вы сохраняете связанные с состоянием конфигурации, такие как цвет курсора и т.д.
Удивленный никто не опубликовал это еще...
(defalias 'evil-insert-state 'evil-emacs-state)
Все, что пытается вызвать evil-insert-state
, просто вызовет evil-emacs-state
. Работает для i, a, o, O и т.д.
Если точка заключается в том, что вы хотите использовать нормальное редактирование 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:
Я не думаю, что проблема серьезная.
Из документации о 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)
Теперь у Зла есть способ сделать это
(setq evil-disable-insert-state-bindings t)
перед загрузкой зла
Ссылка: https://github.com/noctuid/evil-guide#use-some-emacs-keybindings