把任何阻止脚本运行的语法错误发送到标准错误流(stderr) 而不显示一个对话框.
#ErrorStdOut Encoding
#ErrorStdOut UTF-8
将错误信息编码为 UTF-8, 然后再发送到 stderr. 无论捕获输出的程序是什么,都必须支持 UTF-8, 并且在某些情况下可能需要配置为期望如此. 如果省略, 默认为 CP0
.[AHK_L 42+]: 错误输出到 stderr(标准错误) 而不是 stdout(标准输出). 命令行和高级编辑器往往会同时显示这些信息. 这种不太规范的情况仅影响 [v1.1.19.01] 之前的版本.
这个指令可以让类似 TextPad, SciTE, Crimson 和 EditPlus 这些高级编辑器在语法错误发生时跳到有问题的行. 添加 #ErrorStdOut 指令到每个脚本中通常比使用命令行开关 /ErrorStdOut 更方便. (详情请参阅下面的设置说明)
因为 AutoHotkey 不是控制台程序, 错误将不会直接出现在命令行中. 这可以通过以下方法解决 1) [v1.1.33+] 使用 Ahk2Exe ConsoleApp 指令编译脚本, 或 2) 通过管道或重定向捕获脚本的输出. 例如:
"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" 2>&1 |more "C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" 2>""Syntax-Error Log.txt"
您还可以通过管道输出把信息直接传输到剪贴板, 只需下载 cb.zip(4 KB) 然后参考下面的例子:
"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" |cb.exe
注意: 2>&1
将 stderr 重定向到 stdout, 而 2>Filename
只将 stderr 重定向到一个文件.
和其他指令一样, #ErrorStdOut 不能有条件地执行.
EditPlus:
/ErrorStdOut "$(FilePath)"
$(FileDir)
TextPad:
cmd.exe
(或者是它的完整路径)/c ""C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "$File""
$FileDir
FileAppend(因为它也可以发送文本到 stderr 或 stdout)