Caps Lock キーが他のキーと一緒に押されていない場合は Escape キーに、他のキーと一緒に押されている場合は Control キーにマップできるようにしたいと考えています。Windows 7 でこれを行うにはどうすればよいでしょうか?
答え1
これは前述のvim wikia ページ上記の Rich の解決策に従って。
; Author: fwompner gmail com
#InstallKeybdHook
SetCapsLockState, alwaysoff
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
Send {Esc}
}
return
これは私の作品ではありませんが、使い始めました。説明どおりに動作し、特に注意点もありません。また、例外をマッピングしようとしないため (不必要であるため)、Chrome で非常にうまく動作します (Vimium で本当に欲しかったのです)。
答え2
これをエスケープに再マッピングするにはシャープキー
ただし、キーボード ドライバーを作成する以外に、条件付き再マッピングを実行する現実的な方法はわかりません。
答え3
これはまさにあなたが望むものではありませんが、多少の欠点を我慢できるなら、非常に近いものです。オートホットキー脚本:
$CapsLock::LControl
$CapsLock Up::Send {Escape}
return
Caps Lock を Ctrl に再マッピングし、キーを放すと Escape を送信します。Caps Lock キーを放すたびに Escape キーが押されることに慣れるまでにしばらく時間がかかりました。ただし、Web サイトのテキスト領域では Escape キーを押すとテキスト領域のフォーカスが失われるため、ほとんど役に立ちません。
しかし、私はこれに対する解決策を探しています。必要なら、C で何らかのドライバー/キーボード フックを書くかもしれません。
Vim 特有の煩わしさ: Ctrl-K の組み合わせで二重音字を入力できなくなり、慣れるまでは単純に煩わしいだけです。ただし、Esc キーと Ctrl キーをできるだけ避けたいので、私にとってはうまく機能します。
答え4
私は以下を使用しますオートホットキーこの脚本は、Vim Tips Wikiで見つけたもの実装は少しハッキーですが、「私にとってはうまくいきます」。(そして、2016-09-19 時点でこのページにある他の回答とは異なり、私が知る限り、何の警告もなく問題を完全に解決します。)
元のコーダーは次のように述べています:
このスクリプトは、Control キーと別のキーを押して、両方をすぐに (つまり、タイムアウト期間前に) 放す「誤検知」を検出して回避しようとします。
キーボードの良し悪しや自分の反応時間に応じて、250 ミリ秒の値を調整してください。これは、自分の好みに合わせて実験的に調整するとよいかもしれません。
g_LastCtrlKeyDownTime := 0
g_AbortSendEsc := false
g_ControlRepeatDetected := false
*CapsLock::
if (g_ControlRepeatDetected)
{
return
}
send,{Ctrl down}
g_LastCtrlKeyDownTime := A_TickCount
g_AbortSendEsc := false
g_ControlRepeatDetected := true
return
*CapsLock Up::
send,{Ctrl up}
g_ControlRepeatDetected := false
if (g_AbortSendEsc)
{
return
}
current_time := A_TickCount
time_elapsed := current_time - g_LastCtrlKeyDownTime
if (time_elapsed <= 250)
{
SendInput {Esc}
}
return
~*^a::
~*^b::
~*^c::
~*^d::
~*^e::
~*^f::
~*^g::
~*^h::
~*^i::
~*^j::
~*^k::
~*^l::
~*^m::
~*^n::
~*^o::
~*^p::
~*^q::
~*^r::
~*^s::
~*^t::
~*^u::
~*^v::
~*^w::
~*^x::
~*^y::
~*^z::
~*^1::
~*^2::
~*^3::
~*^4::
~*^5::
~*^6::
~*^7::
~*^8::
~*^9::
~*^0::
~*^Space::
~*^Backspace::
~*^Delete::
~*^Insert::
~*^Home::
~*^End::
~*^PgUp::
~*^PgDn::
~*^Tab::
~*^Return::
~*^,::
~*^.::
~*^/::
~*^;::
~*^'::
~*^[::
~*^]::
~*^\::
~*^-::
~*^=::
~*^`::
~*^F1::
~*^F2::
~*^F3::
~*^F4::
~*^F5::
~*^F6::
~*^F7::
~*^F8::
~*^F9::
~*^F10::
~*^F11::
~*^F12::
g_AbortSendEsc := true
return