Укажите язык программирования в файле без расширения
Вопрос
При написании исполняемых сценариев и декларативных конфигурационных файлов, использующих общий язык (напр.Python), я часто нахожу нежелательным добавлять расширение к имени файла.Многие текстовые редакторы с подсветкой синтаксиса (например.Geany) впоследствии не могут автоматически определить тип файла.
Существует ли какой-либо стандартный метод для указания редакторам типа источника в файле?
Решение
Обычно линия shebang используется в качестве запасного варианта.
Например, скрипт на Ruby без расширения будет начинаться с:
#!/usr/bin/env ruby
Другие советы
Vim
В Vim есть концепция, называемая модельная линия.Линия модели - это специально отформатированная строка внутри первой или последних 5 строк текстового файла, которая позволяет вам :setlocal
локальные переменные.Например, для C:
/* vi: set filetype=c fileencoding=UTF-8 shiftwidth=4 tabstop=4 expandtab */
или Руби:
# vi: set filetype=ruby fileencoding=UTF-8 shiftwidth=2 tabstop=2 expandtab
Emacs ( Эмакс )
В Emacs есть аналогичная концепция, называемая Переменные файла.
Переменные файла либо указываются в начале файла (в первой строке, либо, если есть промежуточная строка, то во второй) в этой форме:
/* *-* mode: cc c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil *-* */
или в конце:
# Local Variables:
# mode: ruby
# coding: utf-8
# c-basic-offset: 2
# tab-width: 2
# indent-tabs-mode: nil
# End:
Джедай
Джедай называет это буфер-локальные свойства.Они должны располагаться в пределах первых или последних 10 строк и выглядеть примерно так:
# :mode=ruby:indentSize=2:tabSize=2:noTabs=true:
jEdit также использует строку shebang в качестве запасного варианта для определения режима.
Комодо Править
Существует плагин под названием Komode (каламбур), который добавляет поддержку modeline в Komodo Edit:
# komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2
Он также понимает ограниченное подмножество моделей Vim.
Прочее
Многие другие редакторы также имеют либо свои собственные варианты этого, либо поддерживают один из вышеперечисленных (обычно Vim).
Кодировка на Python / Ruby
И Ruby 1.9, и Python требуют, чтобы кодировка для исходных файлов, отличных от ASCII, была явно указана.К счастью, они делают это способом, совместимым как с моделями Emacs, так и Vim.(В основном, они ищут строку coding
за которым следует несловесный символ, за которым следует пробел, за которым следует допустимое имя кодировки.Оба Vim-х fileencoding=
и Emacs' coding:
удовлетворяйте этим требованиям.)
Генератор модельных линий
Вот простой генератор модельных линий, который генерирует модели для Vim, Emacs и jEdit.
Это работает для многих редакторов, если вы используете нестандартные шаблоны:
#!/usr/bin/env python3
# filetype=python