【问题标题】:Use AHK to detect the "Vim Mode" for GUI windows and configure conditional mappings of keys使用 AHK 检测 GUI 窗口的“Vim 模式”并配置键的条件映射
【发布时间】:2019-06-28 16:30:04
【问题描述】:

励志故事 (TL;DR)

终端,由于历史原因,不会区分tabCtrl+I。当我使用 Vim 时,这会弄得一团糟:我的肌肉记忆告诉我 Ctrl+I 应该让我前进到“Jumplist”中的下一个位置,但是一些 Vim -plugins 会重新映射 tab 键来做其他好事。

更明确的任务

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

  • 对于左侧的窗口,Vim 会话处于“正常模式
  • 对于右侧的窗口,Vim 会话处于“插入模式”。
  • 确实存在其他模式,例如可视模式

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

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

【问题讨论】:

    标签: vim ocr autohotkey


    【解决方案1】:

    无需 OCR/AHK 黑客。

    :nmap(和:nnoremap)仅在正常模式下映射。

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

    等等

    请参阅:help :map-commands,了解用于各种模式的各种不同映射命令。

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

    【讨论】:

    • 我知道:nmap:imap,但是对于<tab><c-i>,它们应该共享一些基本的共同点,因此不可能将它们映射到不同的事物。感谢:verbose 命令!近期来源:github.com/vimwiki/vimwiki/issues/607
    • 不,Ctrl-I 和 Tab 从字面上看是一回事。但是您的帖子谈到根据 mode 将它们映射到不同的事物 - 您已经可以做到这一点,无需 OCR。
    • 啊哈,我明白了。我应该在帖子中更清楚。这是我在发布问题时的目标:最终在正常模式下实现对<tab><c-i>不同 功能。
    【解决方案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.
    

    【讨论】:

    • 有点挑战是我想在正常模式下保留&lt;c-i&gt; 的默认功能,而在正常模式下将&lt;tab&gt; 映射为:VimwikiNextLink。我试过map! &lt;F14&gt; &lt;c-i&gt;; nnoremap &lt;tab&gt; &lt;Plug&gt;VimwikiNextLink; map! &lt;c-i&gt; &lt;F14&gt;,但没有任何反应。正常模式下的&lt;tab&gt;&lt;c-i&gt; 对我没有任何帮助。
    • 更新:重新启动 Vim 显示不同的观察结果 ==> &lt;c-i&gt; 应遵循 &lt;tab&gt; 的新映射,而不是其“保留”的原始功能。
    • 您将&lt;F14&gt; 映射到&lt;C-i&gt;,反之亦然(在插入模式下,通过:map!)。不要那样做。此外,要映射到&lt;Plug&gt;-mapping,您必须使用:nmap,而不是:nnoremap
    • 我明白了。显然,我在尝试使用:map! 时完全迷失了方向。我想使用&lt;tab&gt; 跳转到下一个“超链接”,并正常使用&lt;c-i&gt;。我敢打赌,在普通模式下,让 Vim 将 &lt;c-i&gt;&lt;tab&gt; 映射到不同的东西也是不可能的?
    • 我认为&lt;c-i&gt; 在正常模式下被“映射”为 jump 到跳转列表中的较新位置?我想让&lt;tab&gt; 仅在 Vim 处于正常模式时映射到特殊键 (&lt;F13&gt;)。我想使用&lt;c-i&gt;&lt;c-o&gt; 导航跳转列表。
    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2011-02-19
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多