如何在vim中捕获shift-tab

Yog*_*ora 5 x11 keyboard vim xterm sunos

我想用于shift-tab自动完成和视觉上移动代码块。我一直指的是Make_Shift-Tab_work。该链接讨论了映射^[[Zshift-tab. ^[[Z但当我按下时我不明白shift-tab。在这种情况下我只是得到一个正常的tab

然后讨论如何使用xmodmap -pke | grep 'Tab' 映射 Tab 键。据此输出应该是

keycode 23 = Tab
or
keycode 23 = Tab ISO_Left_Tab
Run Code Online (Sandbox Code Playgroud)

不过我得到

keycode  22 = Tab KP_Tab
Run Code Online (Sandbox Code Playgroud)

如果我使用xmodmap -e 'keycode 22 = Tab ISO_Left_Tab'之后xmodmap -pke | grep 'Tab',我仍然得到

keycode  22 = Tab KP_Tab
Run Code Online (Sandbox Code Playgroud)

这意味着跑步xmodmap -e 'keycode 22 = Tab ISO_Left_Tab'没有任何效果。

最后,链接提到使用xev来查看X当我按下 时收到的内容shift-tabxev但我的系统上没有。

有没有其他方法可以在vim中捕获shift-tab

jam*_*san 3

该链接专门讨论了在插入模式下^[[ZCtrl+ vShift+时的获取。Tab如果您省略Ctrl+ v,那么 Vim 的行为就像您按下了 一样Tab

让 Vim 识别的最简单方法<S-Tab>是直接将t_kB选项设置为终端发送的转义序列,而不是弄乱映射。

作为快速测试,请在正在运行的 Vim 中尝试以下操作:

:set t_kB= Ctrl+ vEsc[Z
:imap <S-Tab> foo

现在,当您在插入模式下按Shift+时,应该插入。如果有效,您可以通过将以下内容添加到 vimrc 来使更改永久生效。Tabfoo

exe 'set t_kB=' . nr2char(27) . '[Z'
Run Code Online (Sandbox Code Playgroud)