Делая Viper государственным глобальным - PullRequest
1 голос
/ 23 июня 2010

EmacsWiki говорит :

Существует способ сделать состояние Viper и состояние вставки Viper глобальным, как в Vim (и, вероятно, vi). В Vim (и, вероятно, vi) вы начинаете в обычном режиме. Вы можете переключать буфер, и Vim остается в обычном режиме. Нажатие «i» переводит Vim в режим вставки. Затем, если вы переключаете буферы, щелкая другое окно, Vim остается в режиме вставки. Вам не нужно помнить, какой буфер находится в каком режиме, вам нужно только запомнить, в каком режиме находится Vim.

Но, к сожалению, они не говорят, что это за метод, и я не смог быстро его найти. Кто-нибудь знает?

1 Ответ

3 голосов
/ 24 июня 2010

Я не знаю ни одной настройки или пакета, чтобы делать то, что вы хотите.Он не предоставляется самой viper.

Тем не менее, вы можете написать совет , который сделает эту работу.Ключевым моментом является то, что вам нужно посоветовать все способы переключения буферов / окон.Например, если вы переключаете окна с помощью команды 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)))

Если вы обнаружите, что используете другой механизм для переключения окон / буферов, который не используетвыше, просто нужно немного покопаться ( Mx description-key ), чтобы узнать, что нового вы должны посоветовать.

...