有(至少)三种方法可以做到这一点。第一种方法是将功能添加到代码的开头,以便它打印出您想要的信息。这种方法的缺点是消息仅在代码开始运行时打印,而不是在构建开始时打印。根据您使用的语言,无论是编译语言还是解释语言,以及您的代码库的大小,这可能是一个显着的滞后。
第二种方法是通过使用 bash 执行的 shell 文件运行构建。在 Windows 上,这需要您安装 bash - Git Bash 和 Cygwin 是获取它的两种常见方式。以下脚本接受任意数量的参数,它在打印“Started”和日期后运行。
#!/bin/bash
echo "[Started at `date`]"
# check to see if we have at least 1 arg
if [ $1 ]
then
# replace this process w/ arg(s) so `exec.py` (the Sublime
# build system) gets the proper return value
exec "${@}"
fi
将此文件另存为 build.sh,保存在您的 PATH 中。
现在,查看您正在使用的构建系统的 .sublime-build 文件,特别是 "shell_cmd" 或 "cmd" 行。如果是"shell_cmd",您只需复制并粘贴它(没有封闭的双引号)进入下面的构建系统。如果是"cmd",则将"cmd": 之后的数组/列表转换为单个字符串。因此,例如,如果您在 Windows 上使用默认的 Python 构建系统,"cmd": ["py", "-u", "$file"] 将变为 py -u $file。本质上,您将数组转换为您在命令提示符下键入的内容,保持以 $(如 $file)开头的 Sublime 内部变量不变。
接下来,选择Tools → Build System → New Build System….擦除其内容并粘贴到以下模板中:
{
"shell_cmd": "bash -c "build.sh new_cmd_goes_here"",
"working_dir": "$file_path",
// "file_regex": "^[ ]*File "(...*?)", line ([0-9]*)",
// "selector": "source.python",
// "env": {"PYTHONIOENCODING": "utf-8"}
}
将 new_cmd_goes_here 替换为您在上述步骤中刚刚创建的命令字符串。因此,对于我们的 Python 示例,该行将变为:
"shell_cmd": "bash -c "build.sh python -u $file_name"",
如果您愿意,可以在构建系统模板中取消注释掉的行。
完成编辑构建系统后,只需点击控制键小号保存,例如将其命名为Python (start message).sublime-build。你不需要更改文件保存的目录,因为 Sublime 会自动将它放在你的 Packages/User 目录中。
第三个选项是修改Packages/Default/exec.py以满足您的需要。这需要了解 Python 和 Sublime 的内部知识。您可以在 here 找到有关构建系统如何工作以及如何扩展它们的基础知识。
简而言之,您可以将 Packages/Default/exec.py 保存为 Packages/User/exec_with_dt.py,必要时将 read_only 标志设置为 False。接下来,将ExecCommand类的名称更改为ExecWithDtCommand。然后,在 self.proc 被定义为 AsyncProcess 之后,添加一行调用 self.append_string() (ST3) 或 self.write() (ST4) 将您想要的字符串写入输出。在 ST4 中,我使用了:
from datetime import datetime as dt
self.write("[Started " + dt.now().strftime("%Y-%m-%d %H:%M:%S") + "]
")
我还没有在 ST3 中测试过这个, 但以下应该在那里工作:
from datetime import datetime as dt
self.append_string(None, "[Started " + dt.now().strftime("%Y-%m-%d %H:%M:%S") + "]
")
保存文件,然后使用以下内容创建一个新的构建系统:
{
"target": "exec_with_dt",
"cmd": ["py", "-u", "$file"],
}
我不推荐这种方法,除非你真的知道你在做什么,并且 shell 脚本方法不足以满足您的需求。可能需要对 exec_with_dt.py 进行其他编辑,以确保与原始 exec.py 具有完整的并行功能,因此请仔细阅读。例如,您可能想将 ExecEventListener 修改为 ExecWithDtEventListener 并更改其代码以运行 exec_with_dt 命令,只是为了将所有内容保留在内部。