Vim 键映射在 urxvt 中表现得很奇怪

Vim key maps act weird in urxvt

最近我开始使用 & 喜欢 urxvt,因为它有大量的选项和透明功能。

不幸的是,Vim 中的某些键映射在 urxvt 中不起作用。

例如,我已经将 Ctrl + Up/DownShift + Up/Down 分别映射到 5 个 10 行 up/down 移动或 Ctrl + Left/Right 到 1 个单词 left/right 移动。

这些移动命令在 xterm 中没有任何问题,但在 urxvt 中它们拒绝工作:它们切换到插入模式并粘贴 ab , cd 作为我的 vim.

的输入

为什么会这样?

我还使用 zsh 作为我的 shell 并映射 Ctrl + Left/Right 以在 zsh 中移动 1 个单词 left/right:这也在 [= 中停止工作11=](仍在 xterm 工作)。

如何才能 urxvt 正确映射按键?

在vim中,您可以拥有:

set t_ku=^[OA
set t_kd=^[OB
set t_kr=^[OC
set t_kl=^[OD

(要获得 ^[OA,请按 ctrl-v,然后按 up

我也用urxvt,因为它很快,所以我没有使用透明功能。在 urxvt 中,您可能需要设置选项 keysym.sym: action 阅读手册页以获取更多详细信息。

建议

  • 如果你使用vim,使用vim动作,ctrl-U/D/F/BwWeEbB..。您根本不需要箭头键。例如。在我的键盘上,按方向键我必须按一个额外的Fn键..太贵了,我的手指不得不离开本垒。

  • 在终端,我建议你习惯emacs-binding来编辑命令行,你的单词跳转是:alt-b (back) and alt-f(forward)还有很多,很常用: ctrl-f, c-h, c-w, a-w,c-b,c-u,c-k,a-. etc ..... 男人也不应该忘记 c-xc-e

根据问题的描述,您可能忽略了 urxvt 中的键定义与 xterm 不同的事实。除非您特别配置 urxvt,否则当您使用 shift、control、alt.

修改它们时,它的特殊键(cursor- 和 keypad-keys)会发送与 xterm 不同的转义序列

您可以使用 urxvt 发送的转义序列,或者您可以使用 keysym 功能配置 urxvt 以发送可比较的转义序列。此功能由 rxvt 引入,并通过 urxvt 进行了扩展,以允许您指定修饰符(shift、control 等),您可能希望限制 keysym 应用于:

keysym.sym: string
Compile frills: Associate string with keysym sym. The intervening resource name keysym. cannot be omitted.

The format of sym is "(modifiers-)key", where modifiers can be any combination of ISOLevel3, AppKeypad, Control, NumLock, Shift, Meta, Lock, Mod1, Mod2, Mod3, Mod4, Mod5, and the abbreviated I, K, C, N, S, M, A, L, 1, 2, 3, 4, 5.

“编译装饰”暗示它是一个可选功能。然而,大多数打包程序似乎都打开了它的所有选项(除非它们发生冲突)。所以它可能对你可用。

ncurses FAQ How can I use shift- or control-modifiers?(vim 顺便提一下 使用 ncurses 或终端数据库中的修饰符信息——它是一个termcap 应用程序——但这是一个不同的问题)。