Создание Viper State Global
Вопрос
Emacswiki говорит:
Существует способ сделать Viper State и Viper Insert State Global, как в VIM (и, вероятно, VI). В Vim (и, вероятно, VI) вы начинаете в нормальном режиме. Вы можете переключить буфер, а VIM остается в нормальном режиме. Нажатие «я» помещает VIM в режим вставки. Затем, если вы переключаете буферы, нажав на другое окно, Vim остается в режиме вставки. Вам не нужно помнить, какой буфер находится в каком режиме, вам нужно только помнить, в каком режиме Vim.
Но, к сожалению, они не говорят, что это за метод, и я не смог найти его быстро. Кто -нибудь знает?
Решение
Я не знаю ни одного настройки или пакета, чтобы делать то, что вы хотите. Это не предоставлено самой гадюкой.
Тем не менее, вы можете написать немного совет что делает работу. Ключом является то, что вам нужно посоветовать все способы переключения буферов/окон. Например, если вы переключаете окна через other-window
команда (Cx o), вам понадобится это:
(defadvice other-window (around other-window-maintain-viper-state activate
activate)
"when switching windows, pull the viper-current-state along"
(let ((old-window-state viper-current-state))
ad-do-it
(viper-change-state old-window-state)))
Но переключение окон с использованием мыши не проходит эту функцию, и для того, чтобы заставить ее работать, вам нужно посоветовать select-window
точно так же:
(defadvice select-window (around select-window-maintain-viper-state activate
activate)
"when switching windows, pull the viper-current-state along"
(let ((old-window-state viper-current-state))
ad-do-it
(viper-change-state old-window-state)))
Если вы обнаружите, что используете другой механизм для переключения Windows/Buffers, который не использует вышеизложенное, он просто требует небольшого количества копания (MX описать ключ ) выяснить, что новая вещь вы должны консультировать.