2015-10-04 107 views
0

我很习惯在我的Mac笔记本电脑上进行VI风格的导航,当我需要在家中切换到我的Windows机器时,每次都讨厌。直到我发现“Autohotkey”,我感到很痛苦。它非常强大。但是,我仍然无法弄清楚我在OS X中的一件事,Karabiner拿着一个按钮+按下另一个宏

带有“s”按钮的“HJLK”导航。所以我会按住s并按住h,同时按住它 - 光标向左,为j - 下降,等等。

我可以使用Autohotkey具有类似功能吗?我知道它可能使用CtrlAlt,但我想s按钮的行为就像一个“特殊”按钮。另请记住,它必须是“导航” - 你不应该让s去切换方向。按jjj,然后h,同时按住s应将光标向下移动三次,向左移动一次。

回答

0

您可以使用“&”符号来组合两个键。 Documentation说:

&的符号可以由任何两个键或鼠标按钮之间使用将它们组合成一个自定义的热键。

s & h:: 
    send {left} 
return 
s & j::send {down} 
s & k::send {right} 
s & i::send {up} 

应该做

如果你想切换上述热键的效果,您可以用Hotkey命令来代替(link)定义它们,或者更容易,使用context-sensitive hotkeys

^t:: ; your toggle hotkey 
    navigation_keys_active := ! navigation_keys_active ; toggle 
return 

#if navigation_keys_active 
s & h::send {left} 
; ... etc 
#if 

另外,如果你不想让原来的键功能在所有被覆盖,你can use the ~ tilde operator instead.

当热键触发时,其密钥的原生功能不会被阻止(隐藏在系统中)。

+0

这将阻止单's'键,你就无法输入。 – wOxxOm

0

也许这样吗?

$i::HkHelperFunc("s", "{Up}", "i") 
$h::HkHelperFunc("s", "{Left}", "h") 
$j::HkHelperFunc("s", "{Down}", "j") 
$k::HkHelperFunc("s", "{Right}", "k") 

HkHelperFunc(key, keyIfKeyDown, keyIfKeyUp) { 
    If GetKeyState(key) 
     SendInput, {BS}%keyIfKeyDown% 
    Else 
     SendInput, %keyIfKeyUp% 
} 

或者,也许有点清洁剂,因为没有字符都被删除:

$s:: 
    sDown := True 
    Input, L, L1 T0.3 
    If (sDown && (L = "I" || L = "H" || L = "J" || L = "L")) 
     traytip ;do nothing 
    Else If (ErrorLevel != "Timeout") 
     SendInput, s%L% 
Return 

$s UP:: 
    sDown := False 
Return 

#If sDown 
i::SendInput, {Up} 
h::SendInput, {Left} 
j::SendInput, {Down} 
k::SendInput, {Right} 
+0

起初它似乎工作,但有时它不会识别被自己按下的“s”。 – Agzam

+0

@Agzam而第二个没有工作? – Forivin