检测Vim/Vimscript中的按钮上/下状态

检测Vim/Vimscript中的按钮上/下状态,vim,Vim,是否有方法检测按钮是否被按下,例如ctrl。我搜索了一些有希望的帮助主题,但找不到答案 原因是,一旦到达VimScript函数中,我希望在按住ctrl键的同时保持在特定的循环中,并在释放后退出。查询单个(修改器)键的键状态只会在GVIM中工作,而不会在终端中工作(因为这只会发送完整的击键)。由于Vim倾向于一致性而非仅GUI功能(cp.:help design not),这是不可能的,也不会 如果您真的非常渴望这个特性,那么可以在本机代码中实现它,通过DLL/共享库和libcall()加载到Vi

是否有方法检测按钮是否被按下,例如ctrl。我搜索了一些有希望的帮助主题,但找不到答案


原因是,一旦到达VimScript函数中,我希望在按住ctrl键的同时保持在特定的循环中,并在释放后退出。

查询单个(修改器)键的键状态只会在GVIM中工作,而不会在终端中工作(因为这只会发送完整的击键)。由于Vim倾向于一致性而非仅GUI功能(cp.
:help design not
),这是不可能的,也不会


如果您真的非常渴望这个特性,那么可以在本机代码中实现它,通过DLL/共享库和
libcall()
加载到Vim中。但我建议你重新思考你的方法;当然有不同的方法。

这是不可能的:Vim无法识别Ctrl键为实际键,因此无法确定是否按下了该键。解释一下你想要什么怎么样?我有其他选择。我的希望是使Alt-Tab或Ctrl-Tab功能在缓冲区或选项卡之间切换。按下一次并释放切换到MRU缓冲区/选项卡,而按住Ctrl键按下一次将进一步向下迁移MRU历史记录。我尝试了很多方法在缓冲区和选项卡之间导航,包括本机和插件,但这种行为在Windows上是普遍存在和有用的,我已经习惯了。也许在ctrl键进入函数后,保持循环,直到下一次按键不是tab键?使用什么读取下一个键?抱歉,没有注意到我的编辑没有保存(5分钟窗口)。我已经有了,但是我想复制这个行为来深入了解MRU历史。在不注意按键状态的情况下,很难重载ctrl-tab行为(立即切换到MRU,也可以更深入)。我想我有另一个选择,在下一次按键不是制表符之前保持循环。当只按tab键时,在MRU列表中进行更深入的操作。阅读下一个按键的最佳方式是什么?回答我自己的问题,re:获取下一个按键,getchar()可能是我想要的。对,使用
getcharmod()
甚至可以检查是否仍按Ctrl键。