使用AHK检测GUI窗口的“ Vim模式”并配置键的条件映射

时间:2019-02-04 21:24:58

标签: vim ocr autohotkey

激励人心的故事(TL; DR)

由于历史原因,终端无法将 tab Ctrl + I 区分开。当我使用Vim时,这很混乱:我的肌肉记忆告诉我 Ctrl + I 将使我前进到“跳转列表”中的下一个位置,但是有些Vim -插件会重新映射 tab 键来做其他一些好事。

定义更好的任务

当活动窗口的左下角没有显示“特殊字符”时,我可以从ahk_process gvim.exe为活动窗口进行“条件映射”吗? enter image description here

  • 对于左侧窗口,Vim会话处于“ 普通模式
  • 对于右边的窗口,Vim会话处于“插入模式”。
  • 确实存在其他模式,例如可视模式 enter image description here

最后,我只想将 tab 键映射为“ 普通模式”。我能想到的最好的方法是对左下角的像素固定区域进行OCR,并使其成为条件像素。但是,我没有在AHK上完成OCR工作的经验。

旁注:我正在向Vim社区寻求同一个问题的反面:https://vi.stackexchange.com/questions/18796/may-i-have-a-vim-session-report-its-mode-in-its-window-title

2 个答案:

答案 0 :(得分:2)

无需OCR / AHK黑客攻击。

:nmap(和:nnoremap)仅在普通模式下映射。

:imap(和:inoremap)仅在插入模式下映射。

有关各种模式的各种不同的映射命令,请参见:help :map-commands

如果某个插件正在覆盖 Tab 的常规模式映射,请使用:verbose nmap <Tab>(或等效的:verbose nmap <C-I>)查看犯罪者是谁,然后查看它的文档以了解如何重新绑定它(或者在最坏的情况下,消除罪魁祸首)。

答案 1 :(得分:2)

无需获取Vim的当前模式即可将其用于其他应用程序。那真的很麻烦。如果您的最终目标是向<Tab> / <C-i>发送不同的密钥给Vim(例如<F13>而不是<Tab>),而您只希望Vim在某些模式下做出不同的反应(例如正常模式),您可以映射其他模式以再次统一两个键:

:nnoremap <F13> ... " Functionality A
:nnoremap <C-i> ... " Functionality B
:map! <F13> <C-i>   " Both keys continue to do the same in insert and command-line mode.