如何创建读取 shebang 的 Sublime Text 3 构建系统

2024-01-30

如何在 Sublime Text 3 中创建构建系统"cmd"是否被替换为 shebang(如果存在)?

更具体地说,是否有办法更改 Python 构建系统以使用 shebang 中指定的 Python 版本,并在不存在 shebang 的情况下使用默认版本?


Sublime 构建系统有一个名为target其中指定了一个WindowCommand将被调用来执行构建。默认情况下,这是内部exec命令。您可以创建自己的命令来检查文件中的 shebang 并使用该解释器或其他默认值。

例如(警告:我不太精通 Python,所以这可能相当难看):

import sublime, sublime_plugin

class ShebangerCommand(sublime_plugin.WindowCommand):
    def parseShebang (self, filename):
        with open(filename, 'r') as handle:
            shebang = handle.readline ().strip ().split (' ', 1)[0]
        if shebang.startswith ("#!"):
            return shebang[2:]
        return None

    def createExecDict(self, sourceDict):
        current_file = self.window.active_view ().file_name()
        args = dict (sourceDict)

        interpreter = args.pop ("interpreter_default", "python")
        exec_args = args.pop ("interpreter_args", ["-u"])
        shebang = self.parseShebang (current_file)

        args["shell_cmd"] = "{} {} \"{}\"".format (shebang or interpreter,
                                                   " ".join (exec_args),
                                                   current_file)

        return args

    def run(self, **kwargs):
        self.window.run_command ("exec", self.createExecDict (kwargs))

你可以将其保存在Packages/User作为 python 文件(例如shebanger.py).

这将创建一个名为的新命令shebanger收集所给定的参数,检查触发构建的窗口当前活动视图中的文件以查看第一行是否是 shebang,然后综合所需的参数exec命令并运行它。

由于默认的 python 构建系统假设它正在构建当前文件并传递-u作为一个参数,这也是该命令复制的内容。但请注意,此代码并非 100% 正确,因为 shebang 行中的任何参数都将被忽略,但您已经了解了总体思路。

使用的时候可以修改一下默认的Python.sublime-build文件看起来像这样:

{
    // WindowCommand to execute for this build
    "target": "shebanger",

    // Use this when there is no shebang
    "interpreter_default": "python",

    // Args to pass to the interpreter
    "interpreter_args": ["-u"],

    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",

    "env": {"PYTHONIOENCODING": "utf-8"},

    "variants":
    [
        {
            "name": "Syntax Check",
            "interpreter_args": ["-m py_compile"],
        }
    ]
}

请注意,在变体中,我们覆盖了解释器参数的内容;如果需要,您也可以覆盖默认解释器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建读取 shebang 的 Sublime Text 3 构建系统 的相关文章

随机推荐

  • 如何在javafx代码中添加Anchorpane约束?

    我知道您可以在 fxml 中添加 Anchor Pane 包含 例如 AnchorPane bottomAnchor 0 0 但是您可以在 java 代码中设置 AnchorPane 约束吗 AnchorPane 上有一组静态方法 您可以使
  • C++/CLI MSIL 程序集中的指针数组

    我正在尝试包装一些遗留的 C 代码 以便与在 NET Core 上运行的 C 一起使用 我在用着这里给出的方法 https stackoverflow com a 9004833创建编译为纯 MSIL 的 C 包装器 它对于简单的函数运行良
  • 在什么情况下,finally {} 块不会执行?

    在Java中try catch finally 块 内的代码finally 通常被认为 保证 运行 无论 try catch 中发生什么 然而 我知道至少在两种情况下它会not执行 If System exit 0 叫做 或者 如果异常一直
  • WildFly 中未找到 Nashorn 类

    我需要从 WildFly 中运行的 Web 应用程序内的 nashorn 访问内部类 以下代码在我的机器上运行良好 public class NashornTest public static void main String args t
  • 休眠验证器。如何使用@Valid注解?

    目的是什么 Valid将其放在方法参数级别时的注释 public void Valid Person p 我创建了一个测试 并将无效对象传递给该方法 但没有任何反应 我希望得到一个例外 The Valid对象上的注释指示验证框架处理带注释的
  • CMUSphinx 实时语音识别太慢?

    CMU Sphinx 识别实时语音太慢 不知道你有什么办法增强它吗 这是我的配置 configuration setAcousticModelPath WSJ 8gau 13dCep 16k 40mel 130Hz 6800Hz confi
  • JavaScript RegExp 中的 (*SKIP)(*FAIL) 解决方法

    我有一个在 regex101 com 中运行良好的正则表达式模式 a SKIP FAIL bword b 我正在尝试将其设为正则表达式 以便可以在replace JavaScript 中的函数 JavaScript 代码行是 var reg
  • 在循环中使用 numpy load 时内存溢出

    循环加载 npz 文件会导致内存溢出 取决于文件 列表长度 以下似乎都没有帮助 删除文件中存储数据的变量 使用 mmap 调用 gc collect 垃圾收集 以下代码应该重现该现象 import numpy as np generate
  • 如何检查iOS版本是iOS 6? [复制]

    这个问题在这里已经有答案了 可能的重复 检查 iPhone iOS 版本 https stackoverflow com questions 3339722 check iphone ios version 我想在 iOS 中检查 iOS
  • 如何实现A*算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在 C 中简单实现 AN A 星 算法应该采用哪种方法 本文 https web archive org web 2017050503
  • numpy.sum 性能取决于轴

    对 numpy 数组中的维度求和时 第一个轴和最后一个轴之间是否存在性能差异 具体来说 考虑以下代码 其中sum1 and sum2会执行得更快吗 import numpy as np a np ones 1000 200 b np one
  • 是否可以限制每秒运行的 goroutine 数量?

    我有一个 URL 列表 我需要使用 goroutine 来同时触发 HTTP 请求 是否有办法检查并限制每秒发送的 HTTP 请求数量 Go 中的一个非常简单的版本是对漏桶 https en wikipedia org wiki Leaky
  • 如何从子查询返回多个值

    SELECT state business a report FROM base WHERE state IN SELECT a state FROM heart a join SELECT CAST MAX percent adults
  • 按 ID 累积总和,有滞后

    我想通过 id 创建一个累积和 但是 它不应该对属于正在计算的行的值求和 我已经尝试过使用 cumsum 了 但是 我不知道如何添加一条语句 指定不添加求和行的金额 我正在寻找的结果列是第三列 名为 sum 例如 对于 id 1 第一行 s
  • PySimpleGUI 表元素。如何读取选定的行?

    我是 Python 的初学者 甚至是 PySimpleGui 的初学者 我非常喜欢使用它来创建带有 GU 界面的小型应用程序 我遇到的问题是关于表格元素的 到目前为止 我已成功使用 sqlite 数据库中的数据填充表元素 一旦表格准备好数据
  • 如何将 `git diff --color-words` 的输出转换为 HTML?

    对于处理以纯文本形式存储的散文文本 我真的很喜欢以下输出git diff color words 但我不喜欢它依赖于 ANSI 终端转义序列的方式 我希望获得可用于转换为 HTML 的输出 某种用户友好的原始字符显示 或生成有关两个文件之间
  • HTML5 可以通过其视频标签播放 .mpd Manifest 文件吗?

    我有一个 Movie Manifest mpd 文件 由 5 个 webm 视频流 由不同大小和 bps 组成 和 1 个音频文件组成 我要问的问题是 可以通过 简单 的HTML5视频标签来播放吗 我已经尝试过这个 但它不起作用
  • 随机卡牌生成

    我需要从数组中随机生成三张卡 我有 52 张卡名称的数组 从卡1到卡52 String rank new String 52 for int i 0 i
  • ARMv8 浮点输出内联汇编

    为了添加两个整数 我写 int sum asm volatile add 0 x3 x4 r sum 我怎样才能用两个浮动来做到这一点 我试过 float sum asm volatile fadd 0 s3 s4 r sum 但这给了我一
  • 如何创建读取 shebang 的 Sublime Text 3 构建系统

    如何在 Sublime Text 3 中创建构建系统 cmd 是否被替换为 shebang 如果存在 更具体地说 是否有办法更改 Python 构建系统以使用 shebang 中指定的 Python 版本 并在不存在 shebang 的情况