6

Как мне заставить Sublime Text 3 распознавать тип файла (т.е. задавать синтаксис и систему сборки) на основе заголовка файла?

Например: если первая строка файла была <!DOCTYPE html> , он будет распознан как файл HTML или если первая строка в файле будет #!/usr/bin/env python3 он знал бы, что это файл Python 3.

Обычно я знаю, что расширения файлов будут диктовать это, но я использую Linux, и многие из этих файлов не имеют расширений, потому что они являются командами.

3 ответа3

1

Чтобы расширить ответ Джерарда Роша, если вам интересно, как найти эти файлы определения синтаксиса в Sublime Text 3, я нашел этот ответ полезным.

Подводя итог: в MacOS X файлы пакета находятся по адресу /Applications/Sublime Text.app/Contents/MacOS/Packages и представляют собой zip-файлы, даже если они не показывают расширение. Чтобы изменить определения синтаксиса,

  1. Создайте новую папку, в которую вы будете разархивировать (если вы разархивируете на месте, будет сложнее отследить все файлы).
  2. Скопируйте языковой файл, который вы хотите изменить, в эту папку и разархивируйте его. Затем переименуйте предыдущий языковой файл в резервную копию.
  3. Откройте файл <Language>.sublime-syntax и измените правило first_line_match на то, что вам нужно.
  4. Снова сожмите все файлы обратно вместе, назовите файл zip так же, как и исходный файл, а затем переместите его обратно в папку Packages .
1

Плагин ApplySyntax действительно обрабатывает случаи, когда вам нужен другой синтаксис для файлов с одинаковым расширением и многих других.

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[^*]*-\*-'

Смотрите документацию по определениям синтаксиса для более подробной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .