AutoHotkey文本条件Tab到右箭头

时间:2017-10-03 21:11:39

标签: tabs notepad++ autohotkey

当插入符号时,我尝试将Tab发送权限为"或者'或)或]或}} ...使用AutoHotkey脚本。

1)如何在不弄乱AHK条件代码的情况下检测这些字符? 2)我设法在一个随机字符之前让Tab发送权限,但是当条件不成立时它没有发送Tab。

你能帮帮我吗?我觉得我离预期的行为并不远。

这是我的代码:

; 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

1 个答案:

答案 0 :(得分: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设置为"
  • 代码尝试捕获两个字符 - 刚刚按下的选项卡和下一个字符。如果插入符号位于缓冲区的末尾,则仅捕获选项卡,然后使用send {right}跳过选项卡。