我有这些映射在我的 Vim 初始化文件中:
nnoremap <S-Tab> <LT><LT>
vnoremap <S-Tab> <LT>gv
目的是能够使用SHIFT-取消缩进TAB。这在 GVim 和 VsVim 中运行良好,但在 ConEmu 内运行的 Vim 中不起作用。
但是,在 Vim 之外的 ConEmu 命令行上,使用-向前TAB和向后进行制表(例如,通过文件名)都可以正常工作,因此 ConEmu 必须对-序列执行一些有意义的操作,并且如果可能的话,我宁愿不破坏命令行行为(尽管如果必须选择,我会选择 Vim 功能)。SHIFTTABSHIFTTAB
我无法确定 Vim 认为它看到的这个按键序列是什么。如果我执行CTRL- v SHIFT- TAB,结果为Î
。当我执行 时char2nr()
,我得到206
,而且确实,这似乎是 Unicode 字符 206。这个结果 206 可以通过 和 键入该序列得到确认:echo getchar()
。但是,执行map Î <S-Tab>
不起作用。
我怎样才能使我的映射起作用?
答案1
版本 141216 修复了您的问题。
顺便说一句,您的解决方法不再需要,但是使用多个keys
GuiMacro 函数并不是最佳的,最好使用某种方式keys("^[","[","Z")
或仅仅使用print("\e[Z")
。
答案2
我找到了一个解决方法。不幸的是,它破坏了在控制台上反向切换文件名的功能,^[[Z
而是插入,所以我仍在寻找比这更好的答案。但是,它确实使SHIFT-TAB在 Vim 中工作,而无需进一步修改 Vim 的配置。我使用 ConEmu 的宏功能将ConEmu 中的SHIFT-映射TAB到 Vim 转义序列^[[Z
(参见:set t_kB
),默认情况下它已经将其解释为<S-Tab>
。宏是keys("^["); keys("["); keys("Z")
,如下所示。