在vim中使用alt+shift+]键映射

10

我想将Alt+Shift+]Alt+Shift+[映射为gtgT(就像在Mac上一样)

我该如何做到这一点?因为如果我只是简单地这样做,它似乎不起作用:

map <A-S-]> gt

不知何故,需要转义或其他处理 ]

2个回答

20

您的定义没有问题。Vim将正确映射该组合键,但它的实际操作方式可能与您的预期略有不同。这个映射本质上是在说:

当按下 ] 以及 ShiftAlt

在标准键盘上,当 ]Shift 结合时,将产生 }。这意味着 Vim 永远不会看到 ]Shift 结合,而只会看到 }。不过,您可以利用这一点来获得所需的行为。请尝试使用以下映射(假设使用标准 QWERTY 键盘):

:map <A-}> gt
:map <A-{> gT

1
这对我不起作用... 我在 Mac 上,如果相关的话。 - iconoclast

17

当你想在vim中重新映射按键时,通常最好进入插入模式,按下Ctrl+V,然后输入你想要重新映射的键。在这种情况下,我得到了一个Escape字符(Ctrl+[),然后是}

我喜欢使用<A-}>表示法,但你也可以通过编辑.vimrc文件来解决问题,输入map文本,然后按下Ctrl+VAlt+Shift+],然后添加gt。你将得到一行类似于这样的代码

map ^[} gt

(但要使用实际的Escape字符,而不是我在这里键入的^[),这样会起作用。

P.S. 当我尝试这样做时,Alt+Shift+[可以正常工作,但Alt+Shift+]似乎已经在我的vim副本中被占用。我不确定它实际上是做什么,但重新映射它对我来说不起作用。当我键入

:map <A-}>

它会打印No mapping found.


1
不客气!:-) 早些时候,我用这个技巧来确定一个愚蠢终端为其特殊键发送的转义序列。 - steveha
1
在Mac上可以使用控制键+V的方法。 - iconoclast
使用neovim时,Ctrl+V技巧会给我map <M-}> gt而不是map ^[} gt(这是一件好事)。 - Jasha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接