AutoHotKey 脚本的内容感知
Content awareness of AutoHotKey script
AutoHotKey 有内容识别功能吗?我需要在我的应用程序中替换一些 selected 文本。想象一下以下 CSHTML:
@
{
ViewBag.Title = "Welcome";
}
<p>Welcome to this page</p>
我创建了一个非常简单的脚本,即(selected 文本):
- 清除剪贴板
- 发送CTRL+C
- 发送
@normalize("
- 发送CTRL+V
- 发送
")
也就是说,如果我select Welcome to this page
,它将被替换为@normalize("Welcome to this page")
。那部分工作得很好。
但是,如果我想用相同的内容替换 "Welcome"
,我将不得不 select 引号,这大大降低了这个自动化脚本的速度,因为我不能简单地双击单词并 select 它。现在我必须按住鼠标,然后在屏幕上拖动鼠标,直到它到达最后一个结束引号。
相反,我需要我的 AutoHotKey 脚本来执行如下操作:
Send CTRL + C;
var caret = currentCaretTextPosition; //made up
IF caret+1 IS "
Send Delete
IF caret-1 IS "
Send Backspace
Send @normalize("
Send CTRL+V
Send ")
如果说得通。基本上将 "Welcome"
转换为:
- ""
- @normalize("
- @normalize("欢迎光临
- @normalize("Welcome")
这是非常基本的内容感知内容,因为它会检查插入符号周围的字符,然后对其进行操作。
AutoHotKey 脚本(由 CTRL+ALT+SHIFT+X 触发):
^!+x::
clipboard:=""
While clipboard
Sleep 10
While !clipboard
{
Send ^c
Sleep 100
}
Sleep 20
Send @normalize("
Sleep 20
Send ^v
Sleep 20
Send ")
return
我做了一个不太可靠的修复,但不幸的是它需要我使用另一个我不喜欢的键绑定:
^!+z::
clipboard:=""
While clipboard
Sleep 10
While !clipboard
{
Send ^x
Sleep 100
}
Sleep 20
Send {Right}
Sleep 5
Send {BackSpace}
Sleep 5
Send {BackSpace}
Send @normalize("
Sleep 20
Send ^v
Sleep 20
Send ")
return
它可以满足我上面的要求,但不是很防弹。
此解决方案将检查是否有周围的引号并相应地进行。如果右边没有任何内容(例如文件末尾),它可能会失败。如果最初没有选择任何内容,它确实会停止。它不会检查所选内容是否已包含引号。
^!+x::
clipboard := ""
Send , ^x
ClipWait , 1
If ErrorLevel
Return
sNormalize := clipboard
clipboard := ""
Send , {right}+{left 2}^c
ClipWait , 1
Send , % ( clipboard = """""" ? "{del}" : "{left}{right}" )
clipboard := "@normalize""" . sNormalize . """)"
Send , ^v
Return
题外话但我想我会提到它
如果您有很多这样的代码片段,可以选择 Lintalist,它是在 AutoHotkey 中开发的,因此您可以使用自己的脚本和插件对其进行扩展。上面的脚本可以替换为以下代码片段 - 这里它使用编辑器中的选定文本,但您也可以使用剪贴板:
@
{
ViewBag.Title = "[[selected]]";
}
<p>[[selected]]</p>
您可以按应用程序 and/or 语言将片段分组到捆绑包中,分配热键并搜索它们。
您可以在此处了解有关 Lintalist 的更多信息https://lintalist.github.io/ - available plugins here https://lintalist.github.io/#InteractiveBundleText
AutoHotKey 有内容识别功能吗?我需要在我的应用程序中替换一些 selected 文本。想象一下以下 CSHTML:
@
{
ViewBag.Title = "Welcome";
}
<p>Welcome to this page</p>
我创建了一个非常简单的脚本,即(selected 文本):
- 清除剪贴板
- 发送CTRL+C
- 发送
@normalize("
- 发送CTRL+V
- 发送
")
也就是说,如果我select Welcome to this page
,它将被替换为@normalize("Welcome to this page")
。那部分工作得很好。
但是,如果我想用相同的内容替换 "Welcome"
,我将不得不 select 引号,这大大降低了这个自动化脚本的速度,因为我不能简单地双击单词并 select 它。现在我必须按住鼠标,然后在屏幕上拖动鼠标,直到它到达最后一个结束引号。
相反,我需要我的 AutoHotKey 脚本来执行如下操作:
Send CTRL + C;
var caret = currentCaretTextPosition; //made up
IF caret+1 IS "
Send Delete
IF caret-1 IS "
Send Backspace
Send @normalize("
Send CTRL+V
Send ")
如果说得通。基本上将 "Welcome"
转换为:
- ""
- @normalize("
- @normalize("欢迎光临
- @normalize("Welcome")
这是非常基本的内容感知内容,因为它会检查插入符号周围的字符,然后对其进行操作。
AutoHotKey 脚本(由 CTRL+ALT+SHIFT+X 触发):
^!+x::
clipboard:=""
While clipboard
Sleep 10
While !clipboard
{
Send ^c
Sleep 100
}
Sleep 20
Send @normalize("
Sleep 20
Send ^v
Sleep 20
Send ")
return
我做了一个不太可靠的修复,但不幸的是它需要我使用另一个我不喜欢的键绑定:
^!+z::
clipboard:=""
While clipboard
Sleep 10
While !clipboard
{
Send ^x
Sleep 100
}
Sleep 20
Send {Right}
Sleep 5
Send {BackSpace}
Sleep 5
Send {BackSpace}
Send @normalize("
Sleep 20
Send ^v
Sleep 20
Send ")
return
它可以满足我上面的要求,但不是很防弹。
此解决方案将检查是否有周围的引号并相应地进行。如果右边没有任何内容(例如文件末尾),它可能会失败。如果最初没有选择任何内容,它确实会停止。它不会检查所选内容是否已包含引号。
^!+x::
clipboard := ""
Send , ^x
ClipWait , 1
If ErrorLevel
Return
sNormalize := clipboard
clipboard := ""
Send , {right}+{left 2}^c
ClipWait , 1
Send , % ( clipboard = """""" ? "{del}" : "{left}{right}" )
clipboard := "@normalize""" . sNormalize . """)"
Send , ^v
Return
题外话但我想我会提到它
如果您有很多这样的代码片段,可以选择 Lintalist,它是在 AutoHotkey 中开发的,因此您可以使用自己的脚本和插件对其进行扩展。上面的脚本可以替换为以下代码片段 - 这里它使用编辑器中的选定文本,但您也可以使用剪贴板:
@
{
ViewBag.Title = "[[selected]]";
}
<p>[[selected]]</p>
您可以按应用程序 and/or 语言将片段分组到捆绑包中,分配热键并搜索它们。
您可以在此处了解有关 Lintalist 的更多信息https://lintalist.github.io/ - available plugins here https://lintalist.github.io/#InteractiveBundleText