こちらの記事で紹介されているRunnerを試しに使ってみました。
Runnerのインストールが完了したら、Visual Studio CodeのUser Settingsから、setting.json
を編集します。
runner.languageMapというキーのオブジェクトの子に、キーをプログラミング言語名、値を実行したいコマンドの文字列を記述します。Windowsの場合はビルド用のbatファイルを作成して、それを値に設定するのが良いでしょう。
また、Visual Studio Codeの標準に入っていないプログラミング言語は、runner.extensionMapというオブジェクトの子に、キーをプログラミング言語名*1、値に対応する拡張子を指定すると、その拡張子のファイルに対して、runner.languageMapの同じキーを持つコマンドを実行できるようになります。
例として私のsetting.jsonです:
// Place your settings in this file to overwrite the default settings { "editor.renderWhitespace": true, "editor.insertSpaces": "space", "editor.fontSize": 15, "editor.wrappingColumn": 0, "runner.languageMap": { "c": "C:/VisualCodeRunner/crun.bat", "cpp": "C:/VisualCodeRunner/cpprun.bat", "java": "C:/VisualCodeRunner/javarun.bat", "csharp": "C:/VisualCodeRunner/csrun.bat", "scala": "C:/VisualCodeRunner/scalarun.bat", "ruby": "C:/VisualCodeRunner/rubyrun.bat" }, "runner.extensionMap": { "scala": "scala" } }
ScalaはVisual Studio Code標準では含まれていませんが、このようにすることで.scalaファイルに対してC:/VisualCodeRunner/scalarun.batを実行できるようになります。
余談ですが、Visual Studio CodeはScalaのコードをシンタックスハイライトしてくれないので、こちらの拡張を入れると良いです。
さて、ソースコードファイル上でCTRL+SHIFT+Rを押すと、runner.languageMapに設定したコマンドを実行することができます。各言語ごとに用意されているわけではなく、自分で作成するしかありません。私はCドライブ直下にVisualStudioCodeRunnerというディレクトリを作成し、各言語ごとのbatファイルを置いています。 mattnさんのブログにいくつかサンプルでbatファイルがありますが、そのままでは動かなかったものを修正したり、自分用に簡素化して利用しています。 C言語用のbatファイルのサンプルは:
@echo off if "%1" equ "" goto :eof setlocal set tempfile=%date:~4%%time::=% set tempfile=%tempfile:/=% set tempfile=%tempfile:.=% gcc -o %tempfile%.exe "%1" %tempfile%.exe del %tempfile%.exe
となっていますが、tempfile
にスペースが含まれてしまうため、正しく実行ファイル名にならず動きませんでした。 set tempfile=%tempfile:.=%
の次の行に set tempfile=%tempfile: =%
を追加すると動きます。ブログに乗っていたC言語用のサンプルを元に私はイカのようにして使用しています:
@echo off if "%~dpnx1" equ "" goto :eof setlocal set tempfile=%date:~4%%time::=% set tempfile=%tempfile:/=% set tempfile=%tempfile:.=% set tempfile=%tempfile: =% clang -o %tempfile%.exe "%~dpnx1" %tempfile%.exe del %tempfile%.exe endlocal
私はC++でclang++を指定しているついででclangにしていますが、gccで構いません。C++もg++で構いません。サンプルでは他にC#とJavaがありました。C#はほとんど同じ設定で利用しています。Javaは簡素化させました。複数ファイル使う予定がないためクラスファイル検索を省略し、本当はencodingをutf-8にしたかったのですが、Windowsのcmdの都合でデフォルトのencoding(chcp 932)で利用しています。
@echo off setlocal if "%~dpnx1" equ "" goto :eof javac %~dpnx1 if %ERRORLEVEL% neq 0 goto :eof java -cp %~dp1; %~n1 endlocal del "%~dpn1.class" :eof exit /b %ERRORLEVEL%
C++はCと同様です。clang++という点と-std=c++1zが指定されている点が異なります。
@echo off if "%~dpnx1" equ "" goto :eof setlocal set tempfile=%date:~4%%time::=% set tempfile=%tempfile:/=% set tempfile=%tempfile:.=% set tempfile=%tempfile: =% clang++ -o %tempfile%.exe "%~dpnx1" -std=c++1z %tempfile%.exe del %tempfile%.exe endlocal
@echo off if "%~dpnx1" equ "" goto :eof scala "%~dpnx1"
@echo off if "%~dpnx1" equ "" goto :eof ruby "%~dpnx1"
気が向いたら対応するプログラミング言語のbatファイルを増やしていきたいなあと思います。最後になりますが、各プログラミング言語のコマンド(clang, gcc, ruby, scala, javac, javaなど)はcmdにパスが通っている前提で書かれています。