如何在Vim中进行shift +空格键页面?

时间:2008-11-11 03:54:25

标签: vim paging configuration-files

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

map <Space> <PageDown>

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

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

都没有工作。有谁知道如何实现这个功能?

5 个答案:

答案 0 :(得分:32)

你做不到。 CMS的解决方案适用于gVim,但不适用于vim,因为终端无法区分&lt; Space&gt;和&lt; S-Space&gt;因为curses看到它们是一样的。如果vim获得libtermkey支持并且您的终端支持正确的&lt; CSI&gt;,那么将来可能是可能的。序列(如果配置正确,xterm会执行;还没有其他任何内容)。

答案 1 :(得分:12)

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

enter image description here

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

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

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

答案 2 :(得分:6)

使用此:

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

答案 3 :(得分:3)

对于OSX:

nnoremap <Space> <C-d>
nnoremap <S-Space> <C-u>

答案 4 :(得分:0)

this answer的启发,我完成了映射:

  • 使用支持键映射的终端
  • Shift + Space 映射为可以由Vim与 Space 区别开来的字符序列,但仍具有书写的净效果输入文字时留一个空格。

操作方法:

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

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

    • 编写一个字符,当输入文本时,该字符可以被 Backspace 取消。可打印的字符或标签。
    • 还是在Vim普通模式和/或可视模式下很少使用的键(取决于要在哪种模式下使用 Shift + Space )。如果已将它绑定到一些常用的命令,则每次使用该命令时,您可能都会遇到一些延迟(请参阅:h timeout)。

    我将 \ 用作 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中,如果尝试用 Shift + Space 替换光标下的字符(默认情况下为 r ),则不会没有空间。
  • 某些将字符序列解释为命令的程序,例如Vim所做的操作,可能会受到影响。