ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

gcode

Sublime Text编辑器的gcode(g代码)语法高亮;用于查看或编辑CNC或3D打印机gcode文件非常有用

详细信息

安装

  • 总数 10K
  • Win 6K
  • Mac 3K
  • Linux 1K
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 1 1 0 0 1 1 1 0 0 2 1 0 0 1 3 0 1 3 0 2 1 0 1 0 3 1 2 2 1 0 1 0 2 1 1 0 0 1 0 0 1 1 0
Mac 1 1 0 1 0 1 0 0 2 1 1 2 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 2 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

阅读我

源代码
raw.githubusercontent.com

>> 在GitHub上赞助我 <<

Gabriele Staples

目录

(点击展开)

  1. sublime_gcode
    1. 状态:完成!它工作了!
    2. 描述
      1. G代码格式、“风味”和标准
        1. 标准
        2. G代码“风味”
    3. 受这两个项目的启发
  2. 安装
    1. 1. 软件包控制
    2. 2. 手动安装
  3. 问题
  4. 开发者笔记和软件包开发教程
    1. 参考
    2. Sublime Text软件包和语法高亮–它是如何工作的
      1. 1. Sublime Text软件包
      2. 2. 语法高亮
        1. 一个软件包中有多个语法高亮定义
        2. _作用域 –> 色彩方案映射:_如何将语法高亮作用域值映射到实际的语法高亮颜色和格式?
        3. 检查源代码文件中特定位置的语法高亮作用域
        4. 选择所需颜色和格式的范围
        5. 在本地上修改和测试对此软件包的更改

sublime_gcode

状态:完成!它工作了!

这是将此软件包添加到Sublime Package Control的PR:https://github.com/wbond/package_control_channel/pull/8501

这是Package Control网站上的此软件包:https://packagecontrol.sublime.net.cn/packages/gcode。截至2022年4月7日发布到Package Control,该软件包的实际下载量实际上都是针对此软件包所替代的旧软件包,名为gcode-syntax-highlighting,由@themachinist编写。该旧软件包的实际下载量(在Package Control网站上的上面悬停数字以查看它们):1. 总计:8453 2. Windows:5113 3. Mac:2107 4. Linux:1233

因此,仅超过这些计数的数字才是此存储库提供的新gcode软件包的下载次数。

描述

gcode(g-code)语法高亮显示,适用于Sublime Text编辑器;非常适合查看或编辑数控或3D打印机gcode文件,例如来自Ultimaker Cura切片器,PrusaSlicer,或Slic3r等的文件。

Sublime Text 4的截图,显示颜色方案Monokaigcode语法高亮显示

screenshots of gcode syntax highlighting

G代码格式、“风味”和标准

该工具应能够处理和突出显示各种gcode格式和样式,包括以下内容。如果您遇到任何问题,请截图显示的语法高亮,提交一个新的问题,粘贴截图和一大段gcode以便我进行操作和测试,以及与此种gcode语法相关的任何文档链接,并说明您期望看到的格式或突出显示方式。以下列表的主要参考是:https://en.wikipedia.org/wiki/G-code

标准

  1. RS-274
  2. ISO 6983
  3. DIN 66025
  4. PN-73M-55256 和 PN-93/M-55251

G代码“风味”

(如Cura 3D打印机切片器软件)中的机器设置下拉菜单所示)

image

  1. Marlin
  2. Marlin(容积式)
  3. RepRap
  4. Ultimaker 2
  5. Griffin
  6. Makerbot
  7. Bits from Bytes
  8. Mach3
  9. Repetier

受这两个项目的启发

  1. gcode-syntax-highlighting,由@themachinist创建。
    1. 它的分支:https://github.com/ElectricRCAircraftGuy/gcode-syntax-highlighting
    2. 在我项目中,gcode语法受@themachinist上述工作的强烈影响。我使用他的作品作为例子和起点,编写并修改了正则表达式match模式和相关scope。然而,由于我的工作与他的显著不同,我决定从头开始构建我的仓库,而不是成为他仓库的分支。
  2. 这里是由@digex提供的zip文件版本
    1. 在此处找到完整安装说明和说明
    2. 在我项目中,gcode-alternate语法是@digex在上述zip文件中的工作的完全复制品

安装

1. 软件包控制

通过工具->命令面板...或按Ctrl + Shift + P打开命令面板。然后,搜索“安装包”,点击“Package Control: 安装包”。搜索“gcode”,以该名称安装包。gcode现在可作为语法高亮显示选项之一使用。

如果您想移除它,请按Ctrl + Shift + P,然后搜索“Package Control: 移除包”。选择它,然后搜索“gcode”。

要列出所有已安装的包,请按Ctrl + Shift + P,然后输入“Package Control: 列出包”。

2. 手动安装

在Sublime Text中,通过点击首选项 –> 浏览包...找到您的文件夹的路径。这将打开您的GUI文件管理器到Sublime Text包存储的位置。在我使用的Linux Ubuntu 20.04中,这是/home/gabriel/.config/sublime-text-3/Packages(即使我正在运行Sublime Text 4)。

现在,将此包提取到该文件夹。

选项1:图形界面方式:点击上面的绿色“代码”按钮 –> “下载ZIP” –> 保存zip文件,将其提取到上面的路径,并重命名为gcode

或者选项2[我更喜欢的做法]:命令行方式:

# --------------
# Option 2.A: clone the repo directly into your "Packages" dir
# --------------

# cd to the Packages dir (change this path according to your Packages path above)
cd "$HOME/.config/sublime-text-3/Packages"
# clone the repo
git clone https://github.com/ElectricRCAircraftGuy/sublime_gcode.git
# rename the repo dir to "gcode"
mv sublime_gcode gcode

# --------------
# OR Option 2.B [what I prefer]: clone the repo into wherever you want, and then
# symlink it into your "Packages" dir
# --------------

# clone repo into ~/dev
mkdir -p ~/dev
cd ~/dev
git clone https://github.com/ElectricRCAircraftGuy/sublime_gcode.git
# now symlink it into your Packages dir
ln -si ~/dev/sublime_gcode ~/.config/sublime-text-3/Packages/gcode

就是这样!现在,gcode条目已在您的语法高亮菜单中即时可用。

问题

如果主 gcode 语法高亮工具有任何问题或不符合预期,请在此GitHub仓库中创建一个问题,我会处理它。包括应该高亮但未高亮的部分、缺失的gcode文件扩展名等。

开发者笔记和软件包开发教程

如果您是普通用户,可以直接在这里停止。以下笔记是为了我自己,以及想学习如何制作新的Sublime Text扩展包(包括语法高亮包)或其他开发者,或者是想编辑此或其他包的语法高亮效果,或想学习如何为这个仓库做贡献的人。

在Linux Ubuntu 20.04上,在Sublime Text 4(构建号4126)中进行了测试。

参考

  1. 大量自己的独立测试和试验
  2. https://zh.wikipedia.org/wiki/G-code
  3. .tmLanguage.YAML-tmLanguage 文件似乎是用于指定语法高亮规则的某些通用类似TextMate的语言语法文件。
  4. Marlin g-code(用于3D打印机)官方参考页面:https://marlinfw.org/meta/gcode/
  5. Sublime Text页面
    1. 语法定义:https://text.sublime.net.cn/docs/syntax.html - 解释了如何构建和操作.sublime-syntax文件。
  6. Package Control
    1. *****自定义包:https://packagecontrol.sublime.net.cn/docs/customizing_packages
    2. *****提交新包:https://packagecontrol.sublime.net.cn/docs/submitting_a_package
  7. *****TextMate语言语法文档:https://macromates.com/manual/en/language_grammars;例如
    1. support.variablecomment.linemarkup.boldsupport.function等。
  8. http://ilkinulas.github.io/programming/2016/02/05/sublime-text-syntax-highlighting.html - 展示了如何通过使用您的范围名称和格式编辑Monokai.tmTheme来修改自定义语法高亮范围的自定义格式。
    1. 注意:后来我发现,我不应该直接修改Monokai颜色主题(因为现在它已经以压缩位置存在,而这个位置不应该被直接修改–参看我的答案此注释),而应该前往首选项 –> 自定义颜色方案并编辑右边的JSON文件的用户设置,在此添加新的字典条目以自定义在字典列表中的rules列表。
  9. https://github.com/va9iff/SublimeNotePad - 简单的Sublime Text包插件示例,其中包含Python代码与Sublime Text GUI和菜单交互!查看其被添加到Package Control的请求:https://github.com/wbond/package_control_channel/pull/8481
  10. *****Sublime Text中语法高亮器的名称空间(我对它的评论):https://github.com/wbond/package_control_channel/pull/8454#issuecomment-1073181257
  11. 查看@digex在这里提供关于gcode语法高亮的全套安装说明和笔记。
  12. https://regex101.com/ - 使用此工具构建、检查和测试您的正则表达式,用作语法高亮匹配模式。

Sublime Text软件包和语法高亮–它是如何工作的

1. Sublime Text软件包

Sublime Text Packages文件夹中的任何文件夹(可通过首选项 –> 浏览包...找到)都由Sublime Text自动即时加载为“包”。

通过Package Control包安装的,但是有两种类型:1. 打包的:Package Control 安装的绝大多数包都被压缩成一个名为packageName.sublime-package的压缩文件,位于与Packages目录同一级的Installed Packages目录中。1. 如果你手动在Packages目录内创建一个命名为packageName的目录(以匹配上面的打包文件),那么其中同名文件将覆盖打包包中的文件。详见“覆盖”部分:[这里](https://packagecontrol.sublime.net.cn/docs/customizing_packages)。1. 未打包的:所有安装到Packages目录的包都将被解包。1. 开发者可以通过在他们的仓库根目录放置一个名为.no-sublime-package的文件来让Package Control解包通过Package Control安装的包。详见[这里](https://packagecontrol.sublime.net.cn/docs/submitting_a_package)。1. 如果包中包含需要由系统运行的二进制可执行文件,则需要使用未打包的包,例如它们显然无法从压缩的ZIP文件中运行。

2. 语法高亮

语法高亮包必须包含一个XML格式的*.tmLanguage文本高亮定义文件,或者一个YAML格式的*.sublime-syntax文件。我的个人测试显示,如果你在两个文件中指定了相同的语法高亮name值,那么*.sublime-syntax文件具有优先级,并且是Sublime Text使用的。请注意,Textmate文件也有名为*.YAML-tmLanguage的YAML格式版本,但据我测试,这个文件对Sublime Text没有作用,并且不被Sublime Text识别。

注意,*.tmLanguage*.sublime-syntax文件的名称并不重要!重要的是该文件内部的name字段!所以,如果你有一个名为whatever.sublime-syntax的文件,并且它包含一个设置为gcodename字段,那么你将在语法高亮选择菜单中看到gcode

要让Sublime Text自动将Textmate的.tmLanguage文件转换为.sublime-syntax文件,请在Sublime Text中打开.tmLanguage文件,然后转到工具 –> 开发者 –> “从*.tmLanguage...新建语法”。将创建一个名为*.sublime-syntax的文件并在Sublime Text中打开,但你必须手动选择保存位置才能保留它。然而,这种自动转换并不总是有效,我无法确定为什么有时不起作用。你也可以转到工具 –> 开发者 –> “新建语法...”来创建一个通用的.sublime-syntax文件示例。

我建议你使用.sublime-syntax文件来指定语法高亮。你可以在这里读取关于它们的官方Sublime Text文档:[这里](https://text.sublime.net.cn/docs/syntax.html)。

一个软件包中有多个语法高亮定义

如果一个包只包含一个语法高亮定义文件(文件格式为*.tmLanguage*.sublime-syntax),则该文件内的name值将显示在你的语法高亮菜单中(再次强调,文件名本身并不重要)。但是,如果你在同一个包中放置多个语法高亮定义文件,则语法高亮菜单将显示包目录名称在菜单中,右侧有一个小黑箭头,当鼠标悬停在此菜单项上时,它会展开以显示包中每个文件的name字段值。例如:此菜单项将由名为Markdown的包目录生成,包含两个语法高亮定义文件,其一将name字段设置为Markdown,另一个设置为MultiMarkdown

image

要临时禁用语法高亮定义文件,只需将其重命名,使其不再有 .tmLanguage.sublime-syntax 扩展名。我喜欢直接在末尾添加 .disabled,以清楚地表明我在做什么。例如,将 whatever.sublime-syntax 重命名为 whatever.sublime-syntax.disabled

_作用域 –> 色彩方案映射:_如何将语法高亮作用域值映射到实际的语法高亮颜色和格式?

.sublime-syntax 文件中的最高级 scope 条目可以是您想要的内容。这似乎与格式或颜色映射没有关系。因此,下面的 gcode 可以是任何内容。

然而,与 match 正则表达式相关联的 scope 条目非常重要!它们必须与您颜色主题的条目相匹配!

考虑这个 example.sublime-syntax 文件

%YAML 1.2
---
# https://text.sublime.net.cn/docs/syntax.html
# GS: https://macromates.com/manual/en/language_grammars
name: gcode
file_extensions:
  - eia
  - nc
  - ngc
  - prg
  - mpf
  - gcode
scope: source.iso6983
contexts:
  main:
    - match: G\d+
      comment: g commands
      scope: support.function
    - match: M\d+
      comment: m commands
      scope: support.constant

gcodename 条目可以是任何内容。但是,support.constant 的作用域名称必须与您的颜色方案文件中的 scope 条目相匹配,以便它能够接受任何格式。

在 Sublime Text 中,转到 Preferences –> Customize Color Scheme,以查看您的颜色主题。我的设置为 Monokai,因此它打开 Sublime Text 颜色方案 JSON 文件

image

左侧包含所有默认定义和值。您无法编辑此部分。右侧包含您的自定义覆盖和添加。您可以编辑这部分。在左侧,您可以看到我已经搜索了 support.constant,并且它被设置为 "var(blue)" 颜色。颜色在 JSON 文件顶部定义在 variables 列表中,如下所示:"blue": "hsl(190, 81%, 67%)",。因此,上述语法定义文件表明,如果源文件中的任何字符串匹配正则表达式 M\d+,则它将被分配 support.constant 的作用域名,并且我的 Monokai 颜色方案有一个 support.constant 的定义,它的前景为蓝色!这就是这种映射是如何工作的!

scope 层次结构

如果我的颜色方案 JSON 文件中没有 support.constantscope 条目,那么它将向上提升一个作用域命名空间级别,并查找 support 的条目。如果存在 support 作用域条目,那么我的 support.constant 将从 support 作用域接收格式。如果没有 support 作用域条目,那么分配给 support.constant 的文本将不应用任何特殊格式。<如果发生这种情况,则可以1.更改语法高亮定义文件中的 scope 名称,或2.在 Preferences –> Customize Color Scheme 中的颜色方案的右侧添加条目。

为您的语法定义文件选择 scope 名称

TextMate 在他们的手册中描述了推荐的 scope 命名约定,在以下部分 “12.4 Naming Conventions” 中:[https://macromates.com/manual/en/language_grammars](https://macromates.com/manual/en/language_grammars)。子项目应以点 (.) 进行作用域,因此在文档中看到如下内容时

  • 注释

...

  • 它意味着您可以有 commentcomment.linecomment.block 等作用域名称。对于 support 作用域,您将看到
    • 支持
    • 函数
    • 类型

常量

请参阅以下标题为“选择所需的颜色和格式的作用域”的部分,以获取更多技巧和技术。

添加一个独特的子作用域

在上面的示例中,使用scopesupport.constant是有效的,因为该作用域在我的颜色方案中有定义。然而,建议您将一个独特的子作用域添加到该作用的末尾!按照惯例,您应该使用整个语法高亮显示定义文件的name值作为子作用域,因此将在所有作用域的末尾添加.gcode以使它们独特。这会导致以下更改:support.function变为support.function.gcodesupport.constant变为support.constant.gcode

这样的好处是,如果愿意,您的语法高亮显示包的使用者和其他包维护者可以定制颜色和格式来影响仅您的包的作用域。他们可以在颜色方案的用户设置中使用此规则覆盖support.constant.gcode作用域,例如

错误:不支持语言“jsonc”
// Documentation at https://text.sublime.net.cn/docs/color_schemes.html
{
    "variables":
    {
    },
    "globals":
    {
    },
    "rules":
    [
        {
            "name": "gcode Library constant",
            "scope": "support.constant.gcode",
            "foreground": "var(grey)"
        }
    ]
}

但是,如果您没有覆盖此作用域,则没有问题!作用域support.constant.gcode可能在颜色方案中没有任何匹配的scope条目,但support.constant将有,因此将默认的support.constant格式应用于您的support.constant.gcode作用域!

有关上述概念的解释和示例的更多信息,请参阅我在此PR上的评论

检查源代码文件中特定位置的语法高亮作用域

为了检查您的语法高亮显示是否正常工作,或者要查看您喜欢的语法高亮显示中的某个颜色和格式的来源范围,请将光标放在要检查的代码上,然后转到工具 –> 开发者 –> 显示作用域名称。如果您想复制该作用域名称,请点击弹出的源代码上方的小框中的“复制”链接。

选择所需颜色和格式的范围

请首先阅读上面的部分,以了解我在这里所做的一切,以及为什么以及它是如何工作的。

准备好到选择新语法和文件类型所需的颜色和格式),我喜欢用来找到适当的作用域(即我喜欢并合理的格式)这一技巧是:

  1. 确保您已在Sublime Text中激活了所需的颜色方案:首选项 –> 选择颜色方案... –> 选择一个颜色方案。我最喜欢Monokai,这是Sublime Text 3的默认设置。我仍在Sublime Text 4中使用它。
  2. 在此颜色方案中打开您非常熟悉的文件类型,例如一个C源文件.c
  3. 找到您喜欢并且对这项工作合理的颜色和格式。例如,在gcode文件中,GM命令基本上是函数,所以,在C源文件中,我会找到一个函数调用,例如printf(),它具有针对G命令的格式,我将鼠标放在它上面。
  4. 转到工具 –> 开发者 –> 显示作用域名称以查看作用域。这是C printf()函数的调用的作用域(而不是定义):“ source.c++ meta.function.c++ meta.block.c++ meta.function-call.c++ support.function.C99.c

  5. 我关心的只是末尾的作用域,即support.function.C99.c。如上所述的“添加独特的子作用域”部分中所述,这里的support.function.C99.c子作用域部分对我来说并不重要。所以,去掉它们。这留下的是support.function作用域。

  6. 通过首选项 –> 自定义颜色方案打开您的颜色方案,以便搜索颜色方案以确保它存在。在左侧面板中,我搜索support.function。我发现以下条目:“jsonc { "name": "Library function", "scope": "support.function, support.macro", "foreground": “var(blue)” },

    Notice the `foreground": "var(blue)"` formatting! That's where this scope for the C `printf()` function gets its formatting! If I like that formatting and want it for `G` commands in `gcode` files, I'll use the `support.function` scope for those `G` commands as well, giving it a unique subscope to ultimately be this scope: `support.function.gcode`.
    
  7. 完成!这是查找和设置所需范围的另一种方法。

  8. 更进一步:在C中,函数的定义而不是调用具有此作用域:“source.c++ meta.function.c++ meta.toc-list.full-identifier.c++ entity.name.function.c++”

    The scope part I care about is at the far right: `entity.name.function.c++`. Strip off the `.c++` and I get `entity.name.function`. I search for that in the color scheme as described above, and it doesn't exist. _But_, `entity.name` _does_ exist! That means this is the scope which sets the formatting in this case. This entry in the color scheme file for Monokai is:
    ```jsonc
    {
        "name": "Entity name",
        "scope": "entity.name - (entity.name.filename | entity.name.section | entity.name.tag | entity.name.label)",
        "foreground": "var(yellow2)"
    },
    

    entity.name - (...)部分意味着:“将此格式应用于entity.name范围及其所有子范围(除了我们在列表中减去的那些)。”您可以看到这些格式将前景设置为var(yellow2)。为确保这一点,复制并粘贴此块到右侧窗格,将其更改为var(blue),并确保您的函数定义的颜色立即更改。是的,确实变化了!(我刚刚测试过)。这意味着我确实找到了正确的范围!无论如何,如果我需要将此作用域格式用于我看重的我的gcode语法高亮的其它内容,我将使用作用域entity.name.gcode作为唯一作用域,映射到此格式!

    完成时,不要忘记删除您在右侧窗格中刚刚所做的自定义设置。

在本地上修改和测试对此软件包的更改

…如果您想更改它或为其做出贡献,请遵循上面所示的“手动安装”说明。如果您已经通过Package Control安装了它,那么您在/home/$USERNAME/.config/sublime-text-3/Packages/gcode文件夹中的内容将覆盖Package Control安装的/home/$USERNAME/.config/sublime-text-3/Installed Packages/gcode.sublime-package zip 文件,只要文件夹和文件名相同。

按需修改Packages/gcode目录中的任何文件。每次您保存,更改都会立即反映在您打开的所有Sublime Text编辑器中。作为快速测试:1. 打开一个gcode文件。1. 将光标移至文件中的某个文本。1. 使用工具 –> 开发者 –> 显示作用域名称技巧查看该文本的作用域。1. 打开相应的*.sublime-syntax文件。1. 更改或删除您已找到的相应scopematch条目中的正则表达式,使它不再匹配您放置光标的文本。1. 保存*.sublime-syntax文件,您将立即看到gcode文件中该文本的格式更改。1. 撤销对match条目的更改并再次保存。格式将恢复到之前的状态。1. 前往首选项 –> 自定义颜色方案,为该作用域添加一个自定义rules条目,包含新的格式。保存它,并将看到格式立即再次更改。如果需要,完成时删除该自定义条目。

完成!

现在您和我一样,是Sublime Text包和语法高亮的扎实初学者!😀