我的 .vimrc 中有一个条目,当我按空格键时,它会在视口中向下翻页。看起来像这样:
map <Space> <PageDown>
我想创建另一个键映射,在按住 Shift 并按空格键时将视口向上分页。我已经尝试过以下条目:
map <Shift><Space> <PageUp>
map <S-Space> <PageUp>
都不起作用。有人知道如何实现这个功能吗?
你不能。 CMS 的解决方案适用于 gVim,但不适用于 vim,因为终端无法区分
如果您在 iTerm2 中使用 vim,您可以通过发送十六进制键 15 将 shift-space 映射到 ctrl+U。这是屏幕截图:
要查找 ctrl+字母组合的十六进制代码,例如 ctrl+u,您可以执行以下操作:
您可以将此想法应用于其他支持键映射的终端模拟器。
使用这个:
map <Space> ^D " Pagedown when press Space
map <S-Space> ^U " Page Up when press Shift Space
要正确获取 ^D 和 ^U 符号,只需按 Control-V Control-D 和 Control-V Control-U
对于 OSX:
nnoremap <Space> <C-d>
nnoremap <S-Space> <C-u>
受到这个答案的启发,我完成了映射:
选择能够进行按键映射的终端之一。
例如,Alacritty、xterm、urxvt 或 Kitty。
选择 Shift+Space 将映射到的字符序列。
SOME_KEY、Backspace、Space 应该可以解决问题,其中 SOME_KEY:
:h timeout
)。我使用 \ 作为 SOME_KEY (` 也可能是一个不错的选择)。
终端中的映射
我使用的是 Alacritty,所以这里是一个将 Shift+Space 映射到 Alacritty 中的字符序列的示例。在配置文件中的“key_bindings”项下添加以下行:
- { key: Space, mods: Shift, chars: "\x5c\x08 " }
。
要确认映射是否有效,请在终端中运行
showkey -a
并按 Shift+Space,然后应该输出字符序列。对于上面的例子,输出是:
\^H 92 0134 0x5c
8 0010 0x08
32 0040 0x20
Vim 中的映射
将字符序列映射到 Vim 配置中的向上翻页。就我而言(使用 \ 作为第一个键),它将是
no <Bslash><C-h><Space> <C-b>
。如果您也需要视觉模式下的映射,请添加vno <Bslash><C-h><Space> <C-b>
。
我已经使用这个设置有一段时间了,它还没有破坏 Vim 以及大多数的插入模式和替换模式 在我的系统上接受文本输入的程序。但这不是解决方案,而是一种解决方法,它确实存在一些缺陷,例如: