【问题标题】:AutoHotkey diacrictics mappings not working correctly with VimAutoHotkey 变音符号映射无法在 Vim 中正常工作
【发布时间】:2014-01-03 18:21:44
【问题描述】:

我一直在 Vim 中使用一些映射,以避免切换键盘布局以输入我的语言(克罗地亚语)的变音符号。但是,现在我想将这些映射“向上”移动,以便它们在全球范围内可用。我尝试为此使用 AutoHotkey。这是我写的映射

#CommentFlag //
!;::Send {U+010D} // č
!'::Send {U+0107} // ć
!]::Send {U+0111} // đ
![::Send {U+0161} // š
!\::Send {U+017E} // ž

这些在我尝试过的每个应用程序(浏览器、记事本、MS Word)中都很好用,但在 Vim 中不起作用,这很烦人,因为我大部分时间都在那里打字。更具体地说,只有“š”和“ž”按预期工作,而 Alt-;和 Alt-' 给我一个 'c'(而不是 'č' 和 'ć'),而 Alt-] 给我一个 'd'(而不是 'đ')。

我正在使用 AutoHotkey_L(尽管我使用“常规”AHK 得到了相同的结果),Vim 7.3(在 gVim 中尝试这个;它在终端版本中也不起作用(以稍微不同的方式)但我在 Win8 上真的不在乎。

我可以提供有关 Vim 版本的更多信息,但它基本上是来自 vim.org 的那些 Windows 二进制文件之一。我想可能很重要的是它有 +multi_byte,而且我一直在其中使用 Unicode,没有任何问题。

更新: 根据下面 Ingo 的建议,我尝试使用 IfWinNotActive 来避免 Vim 中存在映射并继续在那里使用我的旧映射。这是我试过的一个例子

SetTitleMatchMode 2
IfWinNotActive GVIM
{
    #CommentFlag //
    !;::Send {U+010D} // č
    !'::Send {U+0107} // ć
    !]::Send {U+0111} // đ
    ![::Send {U+0161} // š
    !\::Send {U+017E} // ž
}

我还尝试了Vim 窗口类(使用ahk_class)、#IfWindowNotActive 等的许多其他变体,但无济于事...... Vim 中仍然存在映射。顺便说一句,窗口标题始终包含字符串“GVIM”,而 AHK 看到了这一点,正如我通过 WinGetTitle 确认的那样。

【问题讨论】:

  • :set encoding?的价值是多少

标签: vim unicode autohotkey diacritics


【解决方案1】:

我没有解决方案,但有一个变通方法:当我遇到同样的问题时,我决定在全局范围内模拟 Vim 的 digraphs(也使用 AutoHotkey),除了 Vim(和应用程序)像远程桌面)来自该功能(因此仍然可以在那里使用全部范围;我的脚本只支持一个子集)。你可以找到我的实现here

【讨论】:

  • 感谢您的建议!但是,我无法让IfWinNotActive 工作...我尝试将SetTitleMatchMode 设置为2 和RegEx,然后设置IfWinNotActive GVIM*GVIM*,并且还尝试了带有窗口​​类ahk_class Vim 的版本(我已经通过 WinSpy AHK 脚本确认是正确的类)并且这些都没有成功。我还尝试像您一样定义一个组,然后在该组上进行匹配,但仍然没有运气。我将在上面的问题中添加一个示例。
  • 嗯,您使用的是 Windows 8,对吗?我在 Windows XP 和 7 上成功运行。
  • 是的,Windows 8。真的很奇怪:/
【解决方案2】:

您还可以使用Microsoft Keyboard Layout Creator 编辑键盘布局本身。 例如,您使用的英文:选择某个字符和某个功能键的组合(Ctrl 或 Right-Alt,带或不带 Shift - 例如 Caps)。

它的外观如下:

【讨论】:

  • 感谢您的回答!但是,由于某种原因,我似乎无法找到一种方法来重新映射 Alt+ 。我真的很想保持这种“风格”的绑定,因为它是我肌肉记忆的一部分:)
  • 对,这种好方法的主要缺点是您必须使用右 Alt(与 Ctrl + 左 Alt 相同),而不仅仅是左 Alt。
【解决方案3】:

我发现 Apple International US 布局非常适合此用途,所有重音都使用死键可用,因此我使用 stansult 建议的 Microsoft 键盘布局创建器来实现它。

然后我想出了只有一个“Alt”键可用的问题,所以我最终使用 ScanCodemap 重新映射了我的 Windows 和 Alt 键。如果您不经常使用 Windows 键,这是一个可行的解决方案。这种方法的一个警告是,从现在开始你必须使用 Win+Tab 而不是 Alt+Tab 来切换窗口,这需要几天时间才能习惯。

Windows Registry Editor Version 5.00

; 0x003a001d: Caps Lock (0x3a) -> Left Ctrl (0x1d)
; 0x0038e038: Left Alt (0xe05c) -> Right Alt (0x38)
; 0xe05b0038: Left Windows (0xe05b) -> Left Alt (0x38)
; 0xe05c0038: Right Windows (0xe05c) -> Left Alt (0x38)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,05,00,00,00,1d,00,3a,00,38,e0,38,00,38,00,5b,e0,38,00,5c,e0,00,00,00,00

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多