При записи исполняемых сценариев и декларативных конфигурационных файлов, которые используют общий язык (например, Python), я часто нахожу это нежелательным для добавления расширения имени файла. Многие текстовый редактор подсветки синтаксиса (например, Geany) впоследствии неспособны автоматически определить тип файла.
Есть ли какой-либо стандартный метод для указания редакторам тип источника в файле?
Обычно линия shebang используется как запасной вариант.
Например, сценарий Ruby без расширения должен начинаться с:
#!/usr/bin/env ruby
Вим имеет понятие, называемое modeline. Моделин - это специально отформатированная строка либо в первой, либо в последних 5 строках текстового файла, которая позволяет использовать :setlocal
локальные переменные. Например, для C:
/* vi: set filetype=c fileencoding=UTF-8 shiftwidth=4 tabstop=4 expandtab */
или Ruby:
# vi: set filetype=ruby fileencoding=UTF-8 shiftwidth=2 tabstop=2 expandtab
Emacs имеет аналогичное понятие, называемое File Variables.
Переменные файла указываются либо в начале файла (в первой строке, либо если есть строка shebang, то во второй) в этом виде:
/* *-* 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:
jEdit называет это буферно-локальными свойствами. Они должны находиться в пределах первых или последних 10 строк и выглядеть следующим образом:
# :mode=ruby:indentSize=2:tabSize=2:noTabs=true:
jEdit также использует линию shebang как запасной вариант для определения режима.
Существует плагин под названием Komode (pun intended), который добавляет поддержку моделирования в Komodo Edit:
# komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2
Он также понимает ограниченное подмножество мод Vim.
Многие другие редакторы также имеют либо свои собственные варианты этого, либо поддерживают один из вышеперечисленных (обычно Vim).
Как Ruby 1.9, так и Python требуют, чтобы кодировка для исходных файлов не-ASCII была явно указана. К счастью, они делают это таким образом, что это совместимо с моделями Emacs и Vim. (В основном, они ищут строковую кодировку
, за которой следует несловесный символ, за которым следует пробел, за которым следует действительное кодировочное имя. Оба вида кодирования Вима fileencoding=
и Emacs :
удовлетворяют этим требованиям.)
Вот простой modeline generator, который генерирует модемы для Vim, Emacs и jEdit.
.