47

我的 .vimrc 中有一个条目,当我按下空格键时,它会在视口中向下翻页。它看起来像这样:

map <Space> <PageDown>

我想创建另一个键映射,当按住 shift 并按下空格键时,它会将视口向上翻页。我尝试了以下条目:

map <Shift><Space> <PageUp>
map <S-Space> <PageUp>

都不工作。有人知道如何实现这个功能吗?

4

5 回答 5

38

你不能。CMS 的解决方案适用于 gVim,但不适用于 vim,因为终端无法区分 <Space> 和 <S-Space>,因为 curses 认为它​​们相同。如果 vim 获得 libtermkey 支持并且您的终端支持正确的 <CSI> 序列(如果配置正确,xterm 会支持;其他没有),将来可能会实现。

于 2008-11-11T16:59:48.417 回答
16

如果您在 iTerm2 中使用 vim,您可以通过发送十六进制键 15 将 shift-space 映射到 ctrl+U。这是一个屏幕截图:

在此处输入图像描述

要查找 ctrl+字母组合的十六进制代码,例如 ctrl+u,您可以执行以下操作:

  • 在 vim 中进入插入模式
  • 按 ctrl+v 然后 ctrl+u 然后 ctrl+c 然后 ga
  • 各种数字表示将打印在底部

您可以将此想法应用于支持键映射的其他终端仿真器。

于 2013-08-14T06:31:13.020 回答
7

用这个:

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

于 2008-11-11T04:09:26.693 回答
3

对于 OSX:

nnoremap <Space> <C-d>
nnoremap <S-Space> <C-u>
于 2011-10-09T06:14:15.947 回答
0

这个答案的启发,我通过以下方式完成了映射:

  • 使用支持键映射的终端
  • Shift将+映射Space到 Vim 可以区分的字符序列Space,但在输入文本时仍然具有写入空格的净效果。

如何:

  1. 选择能够进行键映射的终端之一。
    例如,Alacritty、xterm、urxvt 或 Kitty。

  2. 选择Shift+Space将映射到的字符序列。
    SOME_KEY, Backspace,Space应该可以解决问题,其中SOME_KEY

    • 写入在输入文本时可以被 a 取消的字符Backspace,例如可打印字符或制表符。
    • 也是您在 Vim 普通模式和/或可视模式下很少使用的键(取决于您要在哪种模式下使用Shift+ Space)。如果它已经绑定到某个频繁使用的命令,那么:h timeout每次使用该命令时,您可能会遇到一些延迟(详情请参阅)。

    我正在使用\as SOME_KEY(`也可能是一个不错的选择)。

  3. 在终端中映射
    我使用的是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
    
  4. Vim 中
    的映射 将字符序列映射到 Vim 配置中的上一页。在我的情况下(\用作第一个键),它将是no <Bslash><C-h><Space> <C-b>. 如果您也需要可视模式下的映射,还可以添加vno <Bslash><C-h><Space> <C-b>.

我已经使用这个设置有一段时间了,它还没有破坏 Vim 的插入模式和替换模式,以及我系统上接受文本输入的大多数程序。但这不是解决方案,而是一种解决方法,确实存在一些缺陷,例如:

  • 在 Vim 中,如果你尝试用+替换光标下的字符(r默认情况下),你不会得到空格。ShiftSpace
  • 一些像 Vim 一样将字符序列解释为命令的程序可能会受到影响。
于 2020-07-25T06:09:20.580 回答