【问题标题】:Mapping <C-Tab> in my vimrc fails in Ubuntu在我的 vimrc 中映射 <C-Tab> 在 Ubuntu 中失败
【发布时间】:2011-02-10 19:41:54
【问题描述】:

我想将 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>

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

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

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

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

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

【问题讨论】:

  • C-Tab 可能对你的终端有特殊意义吗?
  • 可能...我会调查的。我正在运行 xterm。
  • 有关消除 Ctrl-I、Tab、Ctrl-Tab 等歧义的详细 Xterm 解决方案,请查看unix.stackexchange.com/q/631241

标签: vim keyboard-shortcuts keymapping


【解决方案1】:

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

我不能确定,但​​您应该看看 Compiz 扩展以及其中是否定义了该快捷方式。我曾经遇到过类似的问题,不是 vim,但仍然存在。

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

【讨论】:

  • 更多信息:我正在运行 Ubuntu 服务器,安装了 xorg,fluxbox 作为我的窗口管理器
【解决方案2】:

这绝对是终端问题。

显然 xterm 和许多其他终端仿真器默认情况下不拦截 ctrl-tab 并且只发送一个 tab 信号。 Vim wiki page 声明 ctrl-tab 不适用于 xterm、Eterm 和 aterm。还有这个Arch linux form post 声称这是一个终端问题。

解决方案可以通过将来自this blog post 的信息与此vim wiki for mapping keycodes 结合起来找到。它的要点是,您需要配置 xterm 以在您的 .Xresources 文件中拦截并发送 ctrl-tab 和 ctrl-shift-tab 的唯一代码,然后使用一些时髦的映射将其破解到您的 .vimrc 中。

长话短说,这很难做到(这里还没有让它工作),因为 xterm 和 vim 都需要被欺骗才能做到。我个人将继续使用另一个映射...这个问题很浪费时间,我认为不值得继续努力让它工作!

感谢大家的帮助。

【讨论】:

  • 如果您想临时尝试superuser.com/questions/410982/… 中的解决方案。这使用似乎通过终端工作的 gt 或 gT 的组合键
  • 什么替代终端可以解决这个问题?
  • @wukong 这也是我的想法,我看到 tmux 应该配置为screen-256color,所以我们可以使用其他终端吗?
【解决方案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:

!!重要 - 您必须输入 CTRL-V 而不是 XXXX,然后输入 Esc OR 复制粘贴整个文本并运行 @987654325 @ 可复制粘贴(用&lt;CTRL-R&gt; + 插入)。

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。

完成。

【讨论】:

  • @statquant 它非常适合我。你能写出到底哪一部分不适合你吗?
  • 我不能用这个切换标签,我用这些表格复制了.Xresources 文件,然后cd; xrdb .Xresources 然后使用从XXXX^[ 的更改更新了.vimrc您的线路重新启动了所有终端和 vim ......这不起作用
  • 那么很抱歉,我们可能有不同的版本,您的版本不支持某些内容,或者某些内容中断了这些设置。
  • 为我工作,谢谢。除了我需要将 映射到 vim windows 导航。我所要做的就是在我的 .vimrc 中更改 F13 和 F14 的映射: map map 希望它对某人有所帮助。
【解决方案4】:

就我而言,
我在 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>

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 2014-06-12
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多