所有模式下的Viper模式

时间:2009-12-06 17:03:08

标签: emacs viper viper-mode vimpulse

我正在从vi移动到emacs,并且使用viper和vimpulse,当我C-w C-w到窗口时它会变得很烦人并且无法使用相同的命令返回到原来的那个因为另一个缓冲区,可能是一个帮助缓冲区,不在Viper模式下。我该如何解决这个问题?

我尝试在viper配置中添加其他模式,并默认使用挂钩启动viper模式:

(add-to-list viper-vi-state-mode-list 'help-mode)
(add-hook 'help-mode (lambda () (setq viper-mode t)))

但这些命令都没有奏效。实际上,第一个产生了以下错误:

Warning (initialization): An error occurred while loading `/home/konrad/.emacs.d/init.el':

Wrong type argument: symbolp, (fundamental-mode ...

除了C-w C-w之外,我也错过了无法使用hjkl进行导航。有没有办法重用viper设置的键绑定,而不是为每种模式重新绑定它们?

3 个答案:

答案 0 :(得分:3)

将钩子添加到help-mode的语法如下所示:

(add-hook 'help-mode-hook (lambda () (viper-mode t)))

注意hook变量以“-hook”命名,而setq在这里不起作用,因为viper-mode是一个命令,而不是一个变量。

你可以通过以下方式获得激活毒蛇的所有模式:

(add-hook 'fundamental-mode-hook (lambda () (viper-mode t)))

因为所有模式都继承自基本模式。

答案 1 :(得分:3)

错误是因为你忽略了引用变量viper-vi-state-mode-list,如下所示:

(add-to-list 'viper-vi-state-mode-list 'help-mode)

请参阅this question,了解为何需要引用'viper-vi-state-mode-list

但是,这并没有解决我的问题,这就是我如何让 C-w C-w 以你想要的方式工作:

(define-key help-mode-map (kbd "C-w C-w") 'vimpulse-cycle-windows)

答案 2 :(得分:1)