Sublime Text 3のBuild Systemについて

  • 24
    いいね
  • 0
    コメント

Sublime-buildファイルの新規作成と保存について

メニューのツール > ビルドシステム > ビルドシステム追加...を選択すると、untitled.sublime-buildが開くので名前を付けて保存して下さい。

Windows 10での保存先はユーザー名/AppData/Roaming/Sublime Text 3/Packages/Userになります。
メニューの基本設定 > Pacages フォルダ...で開くことも出来ます。

ビルドシステムのオプション

target

任意

既定のビルドシステムコマンドを無効化し、別のビルドシステムコマンドに置き換えます。

デフォルトのビルドシステムコマンドはexec(Packages/Default/ecec.py)です。
このコマンドは、.sublime-buildファイルで指定された全てのターゲットコマンド引数を受け取り処理します。

selector

任意

例:"selector": "source.language"

メニューのツール | ビルドシステムで、自動が有効の時に、このスコープセレクタを使用して、アクティブビューの適切なビルドシステムを検索します。

source.languageで指定する言語名については、各言語のパッケージ内にある.tmLanguageファイルを参照して下さい。
ファイルの拡張子では無いので注意して下さい。

Windows, osx, linux

任意

windowsの例
"windows":
{
    "encoding": "cp932",
   " ...": "..."
}

プラットフォーム毎に異なる設定を適用する為に使用します。
プラットフォーム固有の値はデフォルト値よりも優先されます。

variants

variantsの例
"variants":
[
    {
        "name": "ターミナルで開く",
        "cmd": ["..".],
        " ...": "..."
        }
    }
]

同じ.sublime-buildファイル内で複数のビルドシステムタスクを指定したい時に使用します。

selectorがアクティブなファイルと一致する場合、メニューのビルドして実行でコマンドパレットを開いた時、そこにnameで指定したバリアント名が表示されます。

name

任意

variants内でのみ有効です

ビルドシステムタスクの識別名を指定します。

名前がRunの場合、自動的にRunタスクをCtrl + Shift + Bにバインドします。

file_regex

任意

show_errors_inline

例:"file_regex": "^(.*?)\\(([0-9]+),?([0-9]+)?\\)\\s(.*)$",

ビルド結果ビューからファイル名、行番号、列番号、エラーメッセージの最大4つのエラー情報フィールドをキャプチャするPerlスタイルの正規表現を指定します。
この情報を取得するには、パターン内のグループを使用します。
ファイル名フィールドと行番号フィールドは必須です。

line_regex

任意

file_regexがマッチせず、line_regexが存在して現在の行にマッチしている場合、file_regexと一致する行が見つかるまでバッファを遡り、2つが一致する行を使用して移動先のファイルと行を決定します。

cmd

shell_cmdによって上書きされ、shell_cmdが無い場合は必須

例:"cmd": ["gcc", "-g", "-Og", "$file_name"]

実行するコマンドと必要な引数を含む配列
絶対パスを指定しないと、PATHで外部プログラムが検索されます。
最終的にsubprocess.Popen(cmd)が呼び出されます。

shell_cmd

cmdの設定を上書きし、cmdが無い場合は必須

例:"shell_cmd": "gcc -g -Og $file_name"

実行するコマンドとその引数を指定する文字列。
最終的にsubprocess.Popen(shell_cmd, shell=True)が呼び出されます。

working_dir

任意

cmdの実行前に現在のディレクトリから変更したい作業ディレクトリを指定します。
実行後は元のディレクトリに復元されます。

encoding

任意

cmdの標準出力のエンコーディングを指定します。
Pythonで有効なエンコーディング名で無ければなりません。
デフォルトはUTF-8です。

env

任意

envの例
"env"
{
    "GOPATH": "c:/go",
    "GOROOT": "c:/go/goroot",
    "...": "..."
}

cmdに渡す前に、現在のプロセスに追加する環境変数

このオプションを使用する事で、システムの設定を変更せずに環境変数を追加または変更する事ができます。

shell

任意

shellの例
"shell": true,
"cmd": "gcc -g -Og $file_name"

trueの場合、cmdはシェル(cmd.exe、bash等)を介して実行されます(shell_cmdと同じように書ける)。

shell_cmdを使用した場合、このオプションは効果がありません。

path

任意

システムの設定を変更すること無く、PATHにディレクトリを追加したい場合に使用します。

syntax

任意

機能が提供されている場合、ビルドシステムの出力をカラー化する為に使用されます。

ビルドシステムの変数

ビルドシステムは、.sublime-buildファイル内の次の変数を展開します。
変数の展開は現在、cmdshell_cmdおよびworking_dirのみ適用されます。

変数名 説明
$file_path 現在のファイルのディレクトリ(例:C:\\Files)
$file 現在のファイルのフルパス(例:C:\\Files\\Chapter1.txt)
$file_name 現在のファイル名(例:Chapter1.txt)
$file_extension 現在のファイルの拡張子のみの部分(例:txt)
$file_base_name 現在のファイルの名前のみの部分(例:Chapter1)
$folder 現在のプロジェクトで最初に開いたフォルダへのパス
$project 現在のプロジェクトファイルへのフルパス
$project_path 現在のプロジェクトファイルのディレクトリ
$project_name 現在のプロジェクトファイルの名前
$project_extension 現在のプロジェクトファイルの拡張子の部分のみ
$project_base_name 現在のプロジェクトファイルの名前の部分のみ
$packages パッケージフォルダのフルパス

ビルドシステムの例

いずれもターゲットOSはWindowsで、ターミナルにConEmuを使用しています。
cmd.exeを使用する場合は、ConEmu64cmdに、/cmd/cに書き換えて下さい。

Visual C++

Visual Studio Community 2017にて確認 (更新:2017/06/01)

Windowsの環境変数にSublime Text 3のPATHをセットした状態で、x64 Native Tools Command Prompt for VS 2017等のコマンドプロンプトを開き、sublコマンドでSublime Text 3を起動して下さい。
このコマンドプロンプト経由で起動しないと、環境変数が設定されていないためビルド出来ません。

VC++.sublime-build
{
    "selector": "source.c, source.c++",
    "file_regex": "^(.*?)\\(([0-9]+),?([0-9]+)?\\)(.*)",
    "shell": true,
    "cmd": ["cl", "/EHsc", "/nologo", "$file_name"],
    "encoding": "cp932",

    "variants":
    [
        {
            "name": "コンパイルして実行",
            "shell": true,
            "cmd": "cl /EHsc /nologo $file_name & $file_base_name"
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "cmd": ["start", "ConEmu64", "/cmd", "cl /EHsc /nologo $file_name & $file_base_name"]
        }
    ]
}

gcc

msys2のmingw64/mingw-w64-x86_64-gcc 6.3.0-2パッケージにて確認 (更新:2017/06/01)

シンタックスハイライトにC++はC++11パッケージ、C言語はC11パッケージを使用

ソースコードをShift_JISで保存している場合は、Windowsのコマンドプロンプトで日本語が文字化けせずに表示できます。
その場合は、"encoding": "cp932"を追加して下さい。
g++.sublime-buildがUTF-8、gcc.sublime-buildがShift_JIS(cp932)を想定したものになっています。

g++.sublime-build
{
    "selector": "source.c++",
    "file_regex": "^(.*?):([0-9]*):?([0-9]*):? (.*)",
    "shell": true,
    "cmd": ["g++", "-std=c++14", "-g", "-Og", "-pipe", "-Wall", "$file_name", "-o", "$file_base_name"],

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": "g++ -std=c++14 -g -Og -pipe -Wall $file_name -o $file_base_name & $file_base_name"
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "g++ -std=c++14 -g -Og -pipe -Wall $file_name -o $file_base_name & $file_base_name"]
            }
        }
    ]
}
gcc.sublime-build
{
    "selector": "source.c",
    "file_regex": "^(.*?):([0-9]*):?([0-9]*):? (.*)",
    "shell": true,
    "cmd": ["gcc", "-std=c11", "-g", "-Og", "-pipe", "-Wall", "$file_name", "-o", "$file_base_name"],
    "windows": {
        "encoding": "cp932",
    },

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "windows": {
                "encoding": "cp932",
                "cmd": "gcc -std=c11 -g -Og -pipe -Wall $file_name -o $file_base_name & $file_base_name"
            }
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu", "/cmd", "gcc -std=c11 -g -Og -pipe -Wall $file_name -o $file_base_name & $file_base_name"]
            }
        }
    ]
}

Clang

msys2のmingw64/mingw-w64-x86_64-clang 3.9.1-3パッケージにて確認 (更新:2017/05/20)

シンタックスハイライトにC++11パッケージを使用
C言語用はsource.c++source.cに、clang++clangに、-std=c++14-std=c11などに書き換えて下さい。

Clangはgcc(g++)とほぼ同じコマンドラインオプションが使えますが、ソースコードをShift_JISで保存しているとwarning: illegal character encoding in string literalが出るのでUTF-8で保存しましょう
ただし、そのままではWindowsのコマンドプロンプトで日本語が文字化けします

clang++.sublime-build
{
    "selector": "source.c++",
    "file_regex": "^(.*?):([0-9]*):?([0-9]*):? (.*)",
    "shell": true,
    "cmd": ["clang++", "-std=c++14", "-g", "-Og", "-pipe", "-Wall", "$file_name", "-o", "$file_base_name.exe"],

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": "clang++ -std=c++14 -g -Og -pipe -Wall $file_name -o $file_base_name.exe & $file_base_name"
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "clang++ -std=c++14 -g -Og -pipe -Wall $file_name -o $file_base_name.exe & $file_base_name"]
            }
        }
    ]
}

C♯

Windows 10とVisual Studio Community 2017にて確認 (更新:2017/05/20)

x64 Native Tools Command Prompt for VS 2017等のコマンドプロンプト経由でSublime Text 3を起動するか、csc.exeのある場所へあらかじめPATHを通して下さい。

Visual Studio付属のコンパイラ(Roslyn)とWindowsにインストールされているコンパイラ(.NET Framework v4.0)はファイル名は同じcsc.exeですが異なるコンパイラです。

csc.sublime-build
{
    "selector": "source.cs",
    "file_regex": "^(.*?)\\(([0-9]+),?([0-9]+)?\\)(.*)",
    "windows":
    {
        "encoding": "Shift_JIS",
        "shell": true,
        "cmd": ["csc", "/nologo", "$file_name"]
    },

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "windows":
            {
                "encoding": "Shift_JIS",
                "cmd": "csc /nologo $file_name & $file_base_name"
            }
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "csc /nologo $file_name & $file_base_name"]
            }
        }
    ]
}

Go

msys2のmingw64/mingw-w64-x86_64-go 1.8-1パッケージにて確認 (更新:2017/05/16)

シンタックスハイライトにGoSublimeパッケージを使用

go.sublime-build
{
    "selector": "source.go",
    "file_regex": "^(.*?):([0-9]*):?([0-9]*):?\\s(.*)$",
    "shell": true,
    "cmd": ["go", "build", "$file_name"],

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": ["go", "run", "$file_name"]
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "go run $file_name"]
            }
        }
    ]
}

D言語

DMD 2.074.0とDUB 1.3.0にて確認 (更新:2017/05/15)

シンタックスハイライトにD Programming Languageパッケージを使用

D言語のコンパイラは標準出力を環境に合わせてUnicodeから適切なコードページに自動では変換してくれないので、日本語の文字列を表示しようとするとSublime Textのビルド結果パネル上では正しく表示されますが、Windowsのコマンドプロンプトで実行するとそのままでは文字化けします

コマンドプロンプトで正しく表示されるようwriteln("こんにちは、世界!".toMBSz.to!string);のような感じでUnicodeからShift_JIS(CP932)に文字コードを変換して表示すると、今度は文字コードが一致しなくなるためSublime Textのビルド結果パネル上では何も表示されなくなります。

dmdの-m64-m32mscoffオプションおよび、dubの--arch=x_86_64--arch=x86_mscoffオプションを使用するには、Visual C++がインストールされた環境でdmdのbinフォルダにあるsc.iniにVisual C++のリンカとWindows SDKへの適切なパスを指定する必要があります。

dmd.sublime-build
{
    "selector": "source.d",
    "file_regex": "^(.*?)\\(([0-9]+),?([0-9]+)?\\):\\s(.*)$",
    "shell": true,
    "cmd": ["dmd", "-m64", "$file_name"],

    "variants": [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": ["rdmd", "-m64", "$file_name"]
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "rdmd -m64 $file_name"]
            }
        },
        {
            "name": "x86",
            "shell": true,
            "cmd": ["dmd", "-m32mscoff", "$file_name"]
        },
        {
            "name": "ビルドして実行 - x86",
            "shell": true,
            "cmd": ["rdmd", "-m32mscoff", "$file_name"]
        },
        {
            "name": "ターミナルで開く - x86",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "rdmd -m32mscoff $file_name"]
            }
        }
    ]
}

sdlファイルのソースセレクタにSDLangパッケージを使用

dub.sublime-build
{
    "selector": "source.sdl, source.json",
    "file_regex": "^(.*?)\\(([0-9]+),?([0-9]+)?\\):\\s(.*)$",
    "shell": true,
    "cmd": ["dub", "build", "--arch=x86_64"],

    "variants": [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": ["dub", "run", "--arch=x86_64"]
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "dub run --arch=x86_64"]
            }
        },
        {
            "name": "x86",
            "shell": true,
            "cmd": ["dub", "build", "--arch=x86_mscoff"]
        },
        {
            "name": "ビルドして実行 - x86",
            "shell": true,
            "cmd": ["dub", "run", "--arch=x86_mscoff"]
        },
        {
            "name": "ターミナルで開く - x86",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "dub run --arch=x86_mscoff"]
            }
        }
    ]
}

Object Pascal

Free Pascal 3.0.2にて確認 (更新:2017/06/01)
シンタックスハイライトにPascal Snippetsパッケージを使用

ソースコードはShift_JISでもSublime Textのビルド結果パネルとWindowsのコマンドプロンプトの両方で文字化けせずに日本語を表示する事が出来ます
UTF-8を使用する場合はコンパイ司令に{$CODEPAGE UTF-8}を指定して下さい

FreePascal.sublime-build
{
    "selector": "source.pascal",
    "file_regex": "^(.*?)\\(([0-9]+),?([0-9]+)?\\)\\s(.*)$",
    "shell": true,
    "cmd": ["fpc", "-Px86_64","-g", "-O1", "-l-", "$file_name"],
    "windows":
    {
        "encoding": "cp932"
    },

    "variants":
    [
        {
            "name": "ビルドして実行",
            "encoding": "cp932",
            "shell": true,
            "windows":
            {
                "cmd": "fpc -Px86_64 -g -O1 -l- -vi- $file_name & $file_base_name"
            },
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "fpc -Px86_64 -g -O1 -l- -vi- $file_name & $file_base_name"]
            }
        }
    ]
}

Rust

Rust 1.17.0とCargo 0.18.0にて確認 (更新:2017/06/01)
シンタックスハイライトにRust Enhancedパッケージを使用

Rust.sublime-build
{
    "selector": "source.rust",
    "file_regex": "[ \\t]*-->[ \\t]*(.*?):([0-9]+):([0-9]+)$",
    "shell": true,
    "cmd": ["rustc", "$file_name"],

    "variants": [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": "rustc $file_name & $file_base_name"
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "rustc $file_name & $file_base_name"]
            }
        }
    ]
}

TOMLパッケージとRust Enhancedパッケージを使用

Rust Enhancedパッケージに依存しているため、インストールされていないとエラーが出ます。

cargo.sublime-build
{
    "selector": "source.rust, source.toml",
    "file_regex": "[ \\t]*-->[ \\t]*(.*?):([0-9]+):([0-9]+)$",
    "syntax": "Packages/Rust Enhanced/Cargo.build-language",
    "shell": true,
    "cmd": ["cargo", "build"],

    "variants": [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": ["cargo", "run"]
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "cargo run"]
            }
        }
    ]
}

Nim

Nim 0.17.0にて確認 (更新:2017/06/01)
シンタックスハイライトにNimLimeを使用

Nim.sublime-build
{
    "selector": "source.nim",
    "file_regex": "^(.+.nim)\\((\\d+), (\\d+)\\) (.*)",
    "line_regex": "Error:",
    "shell": true,
    "cmd": ["nim", "c", "--parallelBuild:1", "$file"],

    "variants": [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": ["nim", "c", "-r", "--verbosity:0", "--hints:off", "$file"],
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "nim c -r --verbosity:0 --hints:off $file"],
            }
        }
    ]
}

OCaml

msys2のmingw-w64-x86_64-ocamlパッケージにて確認 (更新:2017/05/20)

OCaml.sublime-build
{
    "selector": "source.ocaml",
    "file_regex": "^(?:File)? \"(...*?)\", line ([0-9]+), characters [0-9]+-([0-9]+)",
    "shell": true,
    "cmd": ["ocamlopt", "-o", "$file_base_name.exe", "$file_name"],

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "cmd": ["ocaml", "$file_name"]
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "ocaml $file_name"]
            }
        }
    ]
}

Java

Java SE Development Kit 8u131にて確認 (更新:2017/05/20)

コマンドラインオプションに-encoding utf-8を指定しているので、ソースコードはUTF-8で保存して下さい
Sublime Textのビルド結果パネルとWindowsのコマンドプロンプトの両方で正しく日本語を表示することが出来ます

java.sublime-build
{
    "selector": "source.java",
    "file_regex": "^(.*?):([0-9]*):?([0-9]*):? (.*)",
    "shell": true,
    "cmd": ["javac", "-encoding", "utf-8", "$file_name"],
    "windows":
    {
        "encoding": "cp932"
    },

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "windows":
            {
                "encoding": "cp932",
                "cmd": "javac -encoding utf-8 $file_name & java $file_base_name"
            }
        },

        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "javac -encoding utf-8 $file_name & java $file_base_name"]
            }
        }
    ]
}

Kotlin

Kotlin 1.1.2-2にて確認 (更新:2017/05/21)
シンタックスハイライトにKotlin Sublime Text 2 Packageを使用

ソースコードはShift-JIS・UTF-8共にSublime Textのビルド結果パネルとWindowsのコマンドプロンプトの両方で正しく日本語が表示されます

kotlinc-jvm.sublime-build
{
    "selector": "source.Kotlin",
    "file_regex": "(.*?):([0-9]*):?([0-9]*):? (.*)",
    "shell": true,
    "cmd": "kotlinc $file_name -include-runtime -d $file_base_name.jar",
    "windows":
    {
        "encoding": "cp932"
    },

    "variants":
    [
        {
            "name": "ビルドして実行",
            "shell": true,
            "windows":
            {
                "encoding": "cp932",
                "cmd": "kotlinc $file_name -include-runtime -d $file_base_name.jar && kotlin $file_base_name.jar"
            },
        },
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "kotlinc $file_name -include-runtime -d $file_base_name.jar && Kotlin $file_base_name.jar"]
            }
        }
    ]
}

Python

msys2のmingw64/mingw-w64-x86_64-python3 3.5.3-2パッケージにて確認 (更新:2017/05/20)

シンタックスハイライトにPython 3パッケージを使用

Python.sublime-build
{
    "selector": "source.python",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)(.*)",
    "shell": true,
    "cmd": ["python3", "$file_name"],
    "windows":
    {
        "encoding": "cp932"
    },

    "variants":
    [
        {
            "name": "ターミナルで開く",
            "windows":
            {
                "shell": true,
                "cmd": ["start", "ConEmu64", "/cmd", "python3 $file_name"]
            }
        }
    ]
}

Ruby

msys2のmingw64/mingw-w64-x86_64-ruby 2.4.0-1パッケージにて確認 (更新:2017/05/20)

Ruby.sublime-build
{
    "selector": "source.ruby",
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
    "shell": true,
    "cmd": ["ruby", "$file_name"],
    "windows":
    {
        "encoding": "cp932"
    },

    "variants":
    [
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows":
            {
                "cmd": ["start", "ConEmu64", "/cmd", "ruby $file_name"]
            }
        }
    ]
}

lua

msys2のmingw64/mingw-w64-x86_64-lua 5.3.3-2パッケージにて確認 (更新:2017/05/20)

lua.sublime-build
{
    "selector": "source.lua",
    "file_regex": "^(?:lua:)?[\t ](...*?):([0-9]*):?([0-9]*)",
    "shell": true,
    "cmd": ["lua", "$file_name"],

    "variants":
    [
        {
            "name": "ターミナルで開く",
            "shell": true,
            "windows": {
                "cmd": ["start", "ConEmu64", "/cmd", "lua $file_name"]
            }
        }
    ]
}