EmacsWiki说:
有一种方法可以使 Viper 状态和 Viper 插入状态全局化,就像在 Vim(可能还有 vi)中一样。在 Vim(可能还有 vi)中,您从普通模式开始。你可以切换缓冲区,Vim 保持在正常模式。按“i”将 Vim 置于插入模式。然后,如果您通过单击另一个窗口来切换缓冲区,Vim 将停留在插入模式。你不必记住哪个缓冲区处于什么模式,你只需要记住 Vim 是什么模式。
但是很遗憾,他们没有说这个方法是什么,我也没有很快找到。有人知道吗?
EmacsWiki说:
有一种方法可以使 Viper 状态和 Viper 插入状态全局化,就像在 Vim(可能还有 vi)中一样。在 Vim(可能还有 vi)中,您从普通模式开始。你可以切换缓冲区,Vim 保持在正常模式。按“i”将 Vim 置于插入模式。然后,如果您通过单击另一个窗口来切换缓冲区,Vim 将停留在插入模式。你不必记住哪个缓冲区处于什么模式,你只需要记住 Vim 是什么模式。
但是很遗憾,他们没有说这个方法是什么,我也没有很快找到。有人知道吗?
我不知道一个单一的设置或包来做你想做的事。它不是由 viper 本身提供的。
也就是说,你可以写一些建议来完成这项工作。关键是您需要建议您切换缓冲区/窗口的所有方式。例如,如果您通过other-window
命令 ( C-x 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)))
如果您发现您使用了另一种机制来切换不使用上述内容的窗口/缓冲区,则只需进行一点点挖掘 ( M-x describe-key ) 即可找出您应该建议的新事物。