我的 .vimrc 中有一个条目,当我按下空格键时,它会在视口中向下翻页。它看起来像这样:
map <Space> <PageDown>
我想创建另一个键映射,当按住 shift 并按下空格键时,它会将视口向上翻页。我尝试了以下条目:
map <Shift><Space> <PageUp>
map <S-Space> <PageUp>
都不工作。有人知道如何实现这个功能吗?
我的 .vimrc 中有一个条目,当我按下空格键时,它会在视口中向下翻页。它看起来像这样:
map <Space> <PageDown>
我想创建另一个键映射,当按住 shift 并按下空格键时,它会将视口向上翻页。我尝试了以下条目:
map <Shift><Space> <PageUp>
map <S-Space> <PageUp>
都不工作。有人知道如何实现这个功能吗?
你不能。CMS 的解决方案适用于 gVim,但不适用于 vim,因为终端无法区分 <Space> 和 <S-Space>,因为 curses 认为它们相同。如果 vim 获得 libtermkey 支持并且您的终端支持正确的 <CSI> 序列(如果配置正确,xterm 会支持;其他没有),将来可能会实现。
如果您在 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
每次使用该命令时,您可能会遇到一些延迟(详情请参阅)。我正在使用\as 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 的插入模式和替换模式,以及我系统上接受文本输入的大多数程序。但这不是解决方案,而是一种解决方法,确实存在一些缺陷,例如: