如何在vim中捕获换档选项卡

如何在vim中捕获换档选项卡,vim,keyboard,x11,xterm,sunos,Vim,Keyboard,X11,Xterm,Sunos,我想使用shift选项卡自动完成并直观地移动代码块。我一直在说。该链接讨论了映射^[[Z到shift tab。但是当我按下shift tab时,我没有得到^[[Z。在这种情况下,我只得到一个正常的tab 然后讨论如何使用xmodmap-pke | grep'Tab'映射选项卡键 keycode 23 = Tab or keycode 23 = Tab ISO_Left_Tab 不管我得到什么 keycode 22 = Tab KP_Tab 如果我使用xmodmap-e'keycode22=

我想使用
shift选项卡
自动完成并直观地移动代码块。我一直在说。该链接讨论了映射
^[[Z
shift tab
。但是当我按下
shift tab
时,我没有得到
^[[Z
。在这种情况下,我只得到一个正常的
tab


然后讨论如何使用
xmodmap-pke | grep'Tab'
映射选项卡键

keycode 23 = Tab
or
keycode 23 = Tab ISO_Left_Tab
不管我得到什么

keycode  22 = Tab KP_Tab

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

keycode  22 = Tab KP_Tab
这意味着运行
xmodmap-e'keycode22=Tab ISO\u Left\u Tab'
没有效果

最后,链接提到使用
xev
查看当我按下
shift tab
X
接收到什么。但是我的系统上没有
xev


有没有其他方法可以在vim中捕获shift tab?该链接专门讨论在插入模式下按下Ctrl+vShift+tab时获取
^[[Z
。如果关闭Ctrl+v,vim的行为将与按下tab一样

让Vim识别
的最简单方法是直接将
t_kB
选项设置为终端发送的转义序列,而不是干扰映射

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

:设置t_kB=Ctrl+vEsc[Z
:imap foo

现在,当您在插入模式下按Shift+Tab键时,应该插入
foo
。如果这样做有效,您可以将以下内容添加到vimrc中,使更改永久化

exe 'set t_kB=' . nr2char(27) . '[Z'

xmodmap
是否不打印任何内容?运行
xmodmap
后是否有错误代码?什么操作系统(什么发行版)?
xmodmap-pke | grep'Tab'
prints
keycode 22=Tab KP\u Tab
。我使用的是SunOS 5.10
xev
通常包含在一个X utils包中。具体的包名会根据您的Linux发行版而有所不同,但在Debian/Ubuntu上是
x11 utils
,在Fedora/RH上是
xorg-x11-utils
。它也是知道您正在使用哪个终端很有用。类似地,在xterm中尝试一下,看看它是否在那里工作。我的意思是
xmodmap-e…
打印一些东西吗?并检查
xmodmap-e'keycode22=Tab T'
是否工作。它必须不回显任何内容并将
映射到
T
。即使这样做
Shift+Tab它就像一个
选项卡
实际上,当我按下
shift tab
时,我不确定我的终端发送的转义序列是什么。有什么方法可以检查吗?是的,这就是
应该做的。你不必在Vim中做。在shell中,运行
cat
,然后按下
,你应该看到你的终端是什么al为
生成。什么是
egrep'XK_[a-zA-Z_]*Tab'/usr/include/X11/keysymdef.h
显示?#定义XK_选项卡0xFF09#定义XK_KP_选项卡0xFF89#定义XK_ISO u左选项卡0xFE20#定义XK_选项卡0x12d7#