AutoHotkey diacrictics映射与Vim无法正常工作

时间:2014-01-03 18:21:44

标签: vim unicode autohotkey diacritics

我一直在使用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

3 个答案:

答案 0 :(得分:0)

我没有解决方案,但有一个解决方法:当我遇到同样的问题时,我决定全局模仿Vim的 digraphs (也使用AutoHotkey),只是除了Vim(和应用程序)从该功能(如远程桌面)(所以仍然可以在那里使用全范围;我的脚本只支持一个子集)。您可以找到我的实施here

答案 1 :(得分:0)

您还可以使用Microsoft Keyboard Layout Creator编辑键盘布局。 例如,您使用的英语:选择某些字符和某些功能键的组合(Ctrl或Right-Alt,有或没有Shift - 例如对于Caps)。

以下是它的外观: enter image description here

答案 2 :(得分:0)

我发现Apple International US布局非常适合这个目的,使用死键可以使用所有的重音符号,所以我使用了像stansult建议的Microsoft Keyboard Layout创建器来实现它。

然后我想出了只有一个“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