8

我正在从 vi 转移到 emacs,并且使用 viper 和 vimpulse,当我C-w C-w进入一个窗口并且无法使用相同的命令返回到原始窗口时,它变得非常烦人,因为另一个缓冲区(可能是帮助缓冲区)不是在毒蛇模式下。我怎样才能解决这个问题?

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

(添加到列表 viper-vi-state-mode-list '帮助模式)
(add-hook 'help-mode (lambda () (setq viper-mode t)))

但是这些命令都不起作用。事实上,第一个产生了以下错误:

警告(初始化):加载“/home/konrad/.emacs.d/init.el”时出错:

错误的类型参数:symbolp, (fundamental-mode ...

除了C-w C-w,我还想念无法使用 hjkl 导航。有没有办法重用 viper 设置的键绑定,而不是为每种模式重新绑定它们?

4

2 回答 2

3

将钩子添加到帮助模式的语法如下所示:

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

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

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

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

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

于 2009-12-06T17:28:40.910 回答
3

错误是因为您忽略了像这样引用变量viper-vi-state-mode-list

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

请参阅此问题,了解为什么需要引用'viper-vi-state-mode-list

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

(define-key help-mode-map (kbd "C-w C-w") 'vimpulse-cycle-windows)
于 2009-12-06T17:29:30.557 回答