Sublime Text 3 - 根据文件头检测语法

Sublime Text 3 - 根据文件头检测语法

如何让 Sublime Text 3 根据文件头识别文件类型(即设置语法和构建系统)?

例如:如果文件的第一行是<!DOCTYPE html>,它将被识别为 HTML 文件,或者如果文件的第一行是,#!/usr/bin/env python3它将知道它是一个 Python 3 文件。

我知道文件扩展名通常会决定这一点,但我使用的是 Linux,而且很多这些文件没有扩展名,因为它们是命令。

答案1

语法定义有一个first_line_match规则,例如:

HTML:https://github.com/sublimehq/Packages/blob/master/HTML/HTML.sublime-syntax#L12

 first_line_match: (?i)<(!DOCTYPE\s*)?html

PHP的:https://github.com/sublimehq/Packages/blob/master/PHP/PHP.sublime-syntax#L13

first_line_match: '^(#!.*[^-]php[0-9]?|<\?php)\b'

壳:https://github.com/sublimehq/Packages/blob/master/ShellScript/Shell-Unix-Generic.sublime-syntax#L18

first_line_match: '^#!.*\b(bash|zsh|sh|tcsh)|^#\s*-\*-[^*]*mode:\s*shell-script[^*]*-\*-'

查看语法定义文档更多细节。

答案2

应用语法当您需要对具有相同扩展名的文件使用不同的语法等等时,插件确实可以处理这种情况。

答案3

为了扩展 Gerard Roche 的答案,如果你想知道如何在 Sublime Text 3 中找到这些语法定义文件,我发现这个答案有帮助的。

总结一下:在 MacOS X 上,/Applications/Sublime Text.app/Contents/MacOS/Packages即使没有显示扩展名,包文件也位于 zip 文件。要更改语法定义,

  1. 创建一个新文件夹,以便将解压缩到该文件夹​​(如果您就地解压缩,则很难跟踪所有文件)。
  2. 将要修改的语言文件复制到此文件夹并解压。然后将之前的语言文件重命名为备份。
  3. 打开<Language>.sublime-syntax文件并将规则更改first_line_match为您需要的任何内容。
  4. 使用无压缩 zip 将所有文件重新压缩在一起,将 zip 文件命名为与原始文件相同的名称,然后将其移回文件Packages夹。

感谢 xmnboy 指出 zip 文件无法压缩。

答案4

扩展Gerard Roche 的回答,而不是像第 4 步那样重新压缩文件:

  • <Language>.sublime-syntax将修改后的文件保存到~/.config/sublime-text-3/Packages/User/目录。Sublime text 将自动加载它。

相关内容