実行可能なスクリプトや、共通言語 (Python など) を使用する宣言型構成ファイルを作成する場合、ファイル名に拡張子を追加するのは望ましくないことがよくあります。多くの構文強調テキスト エディタ (Geany など) は、その後、ファイルの種類を自動的に判別できません。
ファイル内のソースの種類を編集者に示す標準的な方法はありますか?
実行可能なスクリプトや、共通言語 (Python など) を使用する宣言型構成ファイルを作成する場合、ファイル名に拡張子を追加するのは望ましくないことがよくあります。多くの構文強調テキスト エディタ (Geany など) は、その後、ファイルの種類を自動的に判別できません。
ファイル内のソースの種類を編集者に示す標準的な方法はありますか?
Vimにはモードラインと呼ばれる概念があります。モードラインは、テキストファイルの最初または最後の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には、ファイル変数と呼ばれる同様の概念があります。
ファイル変数は、ファイルの先頭(最初の行、またはシバン行がある場合は2番目の行)で次の形式で指定されます。
/* *-* 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は、モード検出のフォールバックとしてシバンラインも使用します。
Komodo Editにモードラインサポートを追加するKomode (しゃれを意図した)と呼ばれるプラグインがあります:
# komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2
また、Vimモードラインの限られたサブセットも理解します。
他の多くのエディターも、これの独自のバリエーションを持っているか、上記の1つ(通常はVim)をサポートしています。
Ruby 1.9とPythonはどちらも、非ASCIIソースファイルのエンコーディングを明示的に指定する必要があります。幸いなことに、彼らはEmacsとVimの両方のモードラインと互換性のある方法でこれを行っています。(基本的に、文字列、単語以外の文字、空白、有効なエンコーディング名を探しますcoding
。Vimfileencoding=
とEmacsはどちらもcoding:
これらの要件を満たしています。)
これは、Vim、Emacs、jEditのモードラインを生成する単純なモードラインジェネレーターです。
通常、シバン ラインはフォールバックとして使用されます。
たとえば、拡張子のない Ruby スクリプトは次のように始まります。
#!/usr/bin/env ruby
非標準のシバンを使用している場合、これは多くの編集者に有効です。
#!/usr/bin/env python3
# filetype=python