0

我想<delete>在 viper 模式下使用密钥(我认为是 Cd)进行前向删除。

在启动 viper 模式之前,<delete>工作正常。在 viper 模式下,<delete>跳转到缓冲区的最后一行。

我已添加(setq viper-ex-style-editing nil) 到 .viper 并<backspace>在所有模式下工作。

4

3 回答 3

2

试试这个:

(define-key viper-vi-basic-map "\C-d" 'viper-delete-char)
(define-key viper-insert-basic-map "\C-d" 'viper-delete-char)

现在,使用viper-delete-char命令与viper. 如果您想要常规的 emacs 删除行为,请delete-char改用。

viper是使用一堆不同的键映射来实现的,并且弄清楚要修改哪些是棘手的。最简单的方法(通常)是只看源代码。所以你可以从M-x find-library viper. 注意:大多数键映射实际上是在 library 中定义的viper-cmd

于 2011-06-01T16:26:21.160 回答
1

\ 键将切换回 Emacs 模式进行单次击键,因此您可以使用 "\<delete>" 执行您正在寻找的操作,而无需对 .emacs 文件进行任何更改或添加任何代码。

于 2012-05-21T22:58:23.530 回答
0

好的,这就是你要做的。

(1) 在 vi​​per 模式下,用于C-h k找出<delete>绑定的内容。以防万一您希望将其附加到其他键上。

(2) 在某些其他模式下,使用C-h k找出执行您想要的功能的名称。我想是的delete-forward,但不要相信我,检查一下。RMS 有重命名事物的烦人倾向。

(3) 回到 viper 模式缓冲区M-x local-set-key,用于设置您想要的内容。尝试一下。

(4) 如果您愿意将此代码添加到您的 .emacs

(defun fix-del-key-in-viper-mode ()
  (define-key viper-mode-map "<delete>" your-desired-function))
(add-hook viper-mode-hooks fix-del-key-in-viper-mode)

警告,由于我没有测试过,您可能不得不对此有所了解。特别要确保它是真的viper-mode-map,而不是别的东西,因为命名惯例并未始终如一地遵循。

于 2011-06-01T14:08:55.727 回答