27

我想将 ctrl-tab 映射到 :tabn,并将 ctrl-shift-tab 映射到 :tabp。

我让它在 Windows XP 中为 gVim 工作,但在 Ubuntu 9.10 中将它移到我的 .vimrc 并且它不起作用(vim 7.2)。

这是我的 .vimrc 的相关部分:

nmap <C-Tab> :tabn<CR>
nmap <C-S-Tab> :tabp<CR>
nmap <C-t> :tabnew<CR>

<C-t>工作正常,所以映射 ctrl 键似乎不是问题。我真的不知道从哪里开始!考虑到它在 Windows 下运行良好,这里可能出了什么问题?

更多信息:我正在运行 Ubuntu 9.10 服务器,xorgfluxbox安装在上面。我正在xterm用作我的终端。

Ctrl-tab 映射在fluxbox 中工作:可以在我的窗口管理器中成功映射 ctrl-tab 和 ctrl-shift-tab;如果我开始标记我的 xterm,我可以按预期循环浏览这些选项卡。我不确定这意味着什么,但我认为问题不是窗口管理器/xorg 问题。

这些键似乎没有映射到其他东西,并且可以一起成功识别。

回答:这是一个xterm问题 - 它不会拦截和发送ctrl-tab. 有关详细信息,请参阅下面的完整答案。

4

4 回答 4

34

这绝对是终端问题。

显然 xterm 和许多其他终端仿真器默认不拦截 ctrl-tab 而只是发送一个 tab 信号。这个Vim wiki 页面指出 ctrl-tab 不适用于 xterm、Eterm 和 aterm。还有这个Arch linux 表单帖子声称这是一个终端问题。

该解决方案可以通过将此博客文章中的信息与此vim wiki 用于映射键码相结合来找到。它的要点是您需要配置 xterm 以拦截并发送文件中 ctrl-tab 和 ctrl-shift-tab 的唯一代码,然后使用一些时髦的映射.Xresources将其破解。.vimrc

长话短说,这很难做到(仍然没有在这里工作),因为 xterm 和 vim 都需要被欺骗才能做到。我个人将继续前进并使用另一个映射...这个问题是一个严重的时间吸盘,我认为不值得继续努力让它工作!

谢谢你们的帮助。

于 2010-04-23T02:26:33.340 回答
3

我使用了@nfm 回答中的博客和维基帖子并解决了它:

把它放在你的.Xresources文件中(在这种情况下你可以复制粘贴):

xterm*VT100.Translations: #override \
             Ctrl ~Shift <Key>Tab: string(0x1b) string("[27;5;9~") \n\
             Ctrl Shift <Key>Tab: string(0x1b) string("[27;6;9~")

然后执行cd ; xrdb .Xresources并重新启动 xterm。


把它放在你的.vimrc

!!重要- 您必须键入而不是 XXXX CTRL-V,然后Esc 复制粘贴整个文本并运行%s/\(set <F1[34]>=\)XXXX/\=submatch(1) . "\33"/g可复制粘贴(使用 插入<CTRL-R> +)。

set timeout timeoutlen=1000 ttimeoutlen=100
set <F13>=XXXX[27;5;9~
nnoremap <F13> gt
set <F14>=XXXX[27;6;9~
nnoremap <F14> gT

并重新启动 vim。

完毕。

于 2015-08-12T09:37:02.153 回答
0

如果您使用的是 Ubuntu,您可能启用了 Compiz 之类的功能。

我不能确定,但​​你应该看看 Compiz 扩展以及它们是否定义了该快捷方式。我曾经遇到过类似的问题,不是vim,但仍然如此。

也可能是 X 服务器截获了一些击键(例如:xbindkeys)。

于 2010-04-22T09:07:14.080 回答
0

就我而言,
我在 rxvt-unicode (urxvt, v9.22) 上解决了如下问题,

terminal (.Xresource)
URxvt.keysym.Control-Tab: \033[27;5;9~ 

vim v8.0 (.vimrc) 
map <Esc>[27;5;9~ :tabnext<CR>

祝你好运!

于 2020-03-05T13:17:36.867 回答