Vim 键映射在 urxvt 中表现得很奇怪
Vim key maps act weird in urxvt
最近我开始使用 & 喜欢 urxvt
,因为它有大量的选项和透明功能。
不幸的是,Vim
中的某些键映射在 urxvt
中不起作用。
例如,我已经将 Ctrl + Up/Down
和 Shift + Up/Down
分别映射到 5 个 10 行 up/down 移动或 Ctrl + Left/Right
到 1 个单词 left/right 移动。
这些移动命令在 xterm
中没有任何问题,但在 urxvt
中它们拒绝工作:它们切换到插入模式并粘贴 a
、b
, c
或 d
作为我的 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/B
或wWeEbB..
。您根本不需要箭头键。例如。在我的键盘上,按方向键我必须按一个额外的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 应用程序——但这是一个不同的问题)。
最近我开始使用 & 喜欢 urxvt
,因为它有大量的选项和透明功能。
不幸的是,Vim
中的某些键映射在 urxvt
中不起作用。
例如,我已经将 Ctrl + Up/Down
和 Shift + Up/Down
分别映射到 5 个 10 行 up/down 移动或 Ctrl + Left/Right
到 1 个单词 left/right 移动。
这些移动命令在 xterm
中没有任何问题,但在 urxvt
中它们拒绝工作:它们切换到插入模式并粘贴 a
、b
, c
或 d
作为我的 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/B
或wWeEbB..
。您根本不需要箭头键。例如。在我的键盘上,按方向键我必须按一个额外的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 应用程序——但这是一个不同的问题)。