2017-10-03 14 views
0

私は「キャレットが前にあるとき、タブの右送る持ってしてみてください」またはまたは)または]または} ...。AutoHotkeyをテキスト付きタブ

1)どのように私はこれらを検出することができますAHK条件コードをいじりせずに文字?
2)私はタブがランダムな文字の前にするとき右送るが、条件が真でない場合、それはタブを送信しません得ることができた。

あなたは私を助けることができますしてください?私は

ここに私のコードです:

; Notepad++ | Tab = right arrow if before " or ' or) or ] or } 
GetCaretText() 
{ 
ClipboardToRestore := ClipboardAll 
Clipboard = 
Send +{right 1} 
Send ^c 
ClipWait 
Send {left 1} 
CaretText := Clipboard 
Clipboard := ClipboardToRestore 
return CaretText 
} 
Tab:: 
if (GetCaretText() = "" or GetCaretText() = "" or GetCaretText() = "" or GetCaretText() = "" or GetCaretText() = "") 
    Send {right} 
else 
    Send {tab} 
return 

答えて

0

これはTABは、これらの文字をスキップ" ') ] }の代わりに、タブ

; This configures #If statements to match anywhere in title 
SetTitleMatchMode 2 

#IfWinActive - Notepad++ 
    $Tab::onTab() 
#IfWinActive 

onTab() 
{ 
    ClipboardToRestore := ClipboardAll 
    Clipboard = 
    send +{right}^c 
    clipwait 0.1 
    CaretText := Clipboard 
    Clipboard := ClipboardToRestore 
    if (!CaretText) 
    send {tab} 
    else if (instr("""')]}", CaretText)) 
    send +{left}{right} 
    else 
    send +{left}{tab} 
} 

これはTAB

~Tab::onTab() 

onTab() 
{ 
    ClipboardToRestore := ClipboardAll 
    Clipboard = 
    send {left}+{right 2}^c 
    ClipWait 
    CaretText := Clipboard 
    Clipboard := ClipboardToRestore 
    if (strlen(CaretText) == 1) 
    send +{left}{right} 
    else if (instr("""')]}", substr(CaretText, 2))) 
    send +{left}{delete}{right} 
    else 
    send +{left 2}{right} 
} 
を消費しない代替バージョンでの送信を行い

  • キー押下を介しmodifier symbol ~パス(この場合TAB
  • instr(haystack, needle)テストストリングneedleは、文字列リテラルでhaystack
  • 引用符である場合には、倍加によってescapedあります引用符、つまりa:=""""aから"
  • に設定します。 2つの文字を押してください。 - 押されたばかりのタブと次の文字。キャレットがバッファの最後にある場合は、タブのみがキャプチャされ、次にsend {right}がタブをスキップするために使用されます。
+0

ありがとうございました! それは動作しますが、スクリプト自体以外の別の文書の空行でTabキーを押すと、スクリプトはそれ以上動作せず、Tabキーは無効になります。スクリプトをリロードする必要があります。何が原因で何が起こるのでしょうか? –

+0

Mh、これは「まったく」動かず奇妙なことをします^^たぶん両方のバージョンの組み合わせが仕事をするでしょう(最初のものはほぼOKでした) –

+0

ありがとうございます。それぞれのケースは「手動」ですか?新しいコードには、予期せぬ動作があります。たとえば、スニペットがうまくいきません。「if + tab」を送信したスニペットは「if(|){}」を送信しますが、if if |}}を送信します。最初のスクリプトからrebaseする必要があります。ところで、私はメモ帳++にあり、コードがそこでしか動作しないのは大丈夫です。 –

関連する問題