我想<delete>
在 viper 模式下使用密钥(我认为是 Cd)进行前向删除。
在启动 viper 模式之前,<delete>
工作正常。在 viper 模式下,<delete>
跳转到缓冲区的最后一行。
我已添加(setq viper-ex-style-editing nil)
到 .viper 并<backspace>
在所有模式下工作。
我想<delete>
在 viper 模式下使用密钥(我认为是 Cd)进行前向删除。
在启动 viper 模式之前,<delete>
工作正常。在 viper 模式下,<delete>
跳转到缓冲区的最后一行。
我已添加(setq viper-ex-style-editing nil)
到 .viper 并<backspace>
在所有模式下工作。
试试这个:
(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
。
\ 键将切换回 Emacs 模式进行单次击键,因此您可以使用 "\<delete>" 执行您正在寻找的操作,而无需对 .emacs 文件进行任何更改或添加任何代码。
好的,这就是你要做的。
(1) 在 viper 模式下,用于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
,而不是别的东西,因为命名惯例并未始终如一地遵循。