![Sublime Text 3 - 根据文件头检测语法](https://linux22.com/image/1408191/Sublime%20Text%203%20-%20%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%A4%B4%E6%A3%80%E6%B5%8B%E8%AF%AD%E6%B3%95.png)
如何让 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 文件。要更改语法定义,
- 创建一个新文件夹,以便将解压缩到该文件夹(如果您就地解压缩,则很难跟踪所有文件)。
- 将要修改的语言文件复制到此文件夹并解压。然后将之前的语言文件重命名为备份。
- 打开
<Language>.sublime-syntax
文件并将规则更改first_line_match
为您需要的任何内容。 - 使用无压缩 zip 将所有文件重新压缩在一起,将 zip 文件命名为与原始文件相同的名称,然后将其移回文件
Packages
夹。
感谢 xmnboy 指出 zip 文件无法压缩。
答案4
扩展Gerard Roche 的回答,而不是像第 4 步那样重新压缩文件:
<Language>.sublime-syntax
将修改后的文件保存到~/.config/sublime-text-3/Packages/User/
目录。Sublime text 将自动加载它。