2016-09-21 13 views
3

サブラインテキスト3でビルドシステムを作成するにはどうすればよいですか?"cmd"はシバンに置き換えられますSublime Textを作成する方法3シバンを読み込むビルドシステム

具体的には、shebangで指定されたPythonのバージョンを使用するようにPythonビルドシステムを変更し、shebangが存在しない場合はデフォルトを使用する方法がありますか?

答えて

1

サブライムビルドシステムには、targetという名前のオプションがあり、ビルドを実行するために呼び出されるWindowCommandが指定されています。デフォルトでは、これは内部のexecコマンドです。シバンのファイルを調べてそのインタープリタを使用する独自のコマンドを作成するか、そうでない場合はデフォルトを使用することができます。例えば

(警告:私はPythonでスーパー堪能じゃないので、これはおそらく、非常に醜いです):

import sublime, sublime_plugin 

class ShebangerCommand(sublime_plugin.WindowCommand): 
    def parseShebang (self, filename): 
     with open(filename, 'r') as handle: 
      shebang = handle.readline().strip().split (' ', 1)[0] 
     if shebang.startswith ("#!"): 
      return shebang[2:] 
     return None 

    def createExecDict(self, sourceDict): 
     current_file = self.window.active_view().file_name() 
     args = dict (sourceDict) 

     interpreter = args.pop ("interpreter_default", "python") 
     exec_args = args.pop ("interpreter_args", ["-u"]) 
     shebang = self.parseShebang (current_file) 

     args["shell_cmd"] = "{} {} \"{}\"".format (shebang or interpreter, 
                " ".join (exec_args), 
                current_file) 

     return args 

    def run(self, **kwargs): 
     self.window.run_command ("exec", self.createExecDict (kwargs)) 

あなたはPythonのファイル(例えばshebanger.py)としてPackages/Userでこれを保存します。

これは与えられた引数を収集し、ビルドがトリガされたウィンドウの現在アクティブなビューのファイルを調べて、最初の行がシバンであるかどうかを確認してから引数を合成しますexecコマンドに必要なコマンドを実行して実行します。

デフォルトのpythonビルドシステムでは、現在のファイルを構築しており、引数として-uを渡すと仮定しているため、このコマンドも同様に複製されます。ただし、シバン行の引数は無視されるため、このコードは100%正確ではありませんが、一般的な考え方を得ることができます。

使用で、あなたはこのように、デフォルトPython.sublime-buildファイルを変更します:バリアントに私たちは通訳の引数が何であるかをオーバーライドすること

{ 
    // WindowCommand to execute for this build 
    "target": "shebanger", 

    // Use this when there is no shebang 
    "interpreter_default": "python", 

    // Args to pass to the interpreter 
    "interpreter_args": ["-u"], 

    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", 
    "selector": "source.python", 

    "env": {"PYTHONIOENCODING": "utf-8"}, 

    "variants": 
    [ 
     { 
      "name": "Syntax Check", 
      "interpreter_args": ["-m py_compile"], 
     } 
    ] 
} 

お知らせ。必要に応じて、デフォルトのインタプリタも上書きすることもできます。

+0

これは非常に見えるに従ってバージョンを検出するために、PYランチャーを使用し、Windowsの

{ "cmd": ["py", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python", "shell":true } 

マイpython.sublimeビルド有望な - 私はあなたがそれが行く方法を知ってみましょう。ありがとうございました! –

0

標準.sublime-buildファイルを使用してこれを行う唯一の方法は、ファイルを別のスクリプトに渡すことです。このスクリプトは、シバンを解析して正しいPythonバージョンに渡します。

また、build variantsを指定することもできますが、希望するビルドバリアントを手動で選択する必要があります。

関連する問題