Help us understand the problem. What is going on with this article?

【VSCode】Code Runner+wslで一発コードテスト

VSCodeの拡張機能Code Runnerを使うとショートカット(Ctrl+Alt+N)あるいはボタン一発でソースコードのコンパイルから実行までをやってくれる。
Windows用VSCode上のwsl(ubuntu)でC++で書かれたソースコードを実行するための、Code Runnerの設定について備忘録を残しておく。wsl、VSCodeの環境構築はできている前提。
一応競プロで使うことを想定している。
同じ環境ができている方は4.まとめの記述をsettings.jsonにコピペすればok。

1.出力先をターミナルに変更する

初期状態では実行結果が「出力」に出るため、標準入力が使えない。
settings.jsonに以下の設定を追加すると出力先がターミナルに変更される。
"code-runner.runInTerminal": true,
規定のシェルがコマンドプロンプトになっている人はここまででok。

2.wsl用にディレクトリの書式を変更

C++で書かれたコードに対してCode Runnerを実行すると
cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt
というコマンドが既定のシェルで実行される。パラメーターの意味は以下の通り。
  $dir:ソースコードのあるディレクトリ
  $fineName:ソースコードのファイル名
  $fineNameWithoutExt:ソースコードのファイル名から拡張子を除いたもの
この時初期設定では$dirがwindowsの書式(c:\foo\bar)になってしまう。そのため規定のシェルがコマンドプロンプトなどであれば以上の設定で使えるが、wslを使っている場合はC++を動かせない。
そこで"code-runner.terminalRoot":"/mnt/"
をsettings.jsonに書き込むと$dirがLinuxの書式になって実行できるようになる。

3.その他設定

3-1.コマンドの詳細設定

code-runner.executorMapをsettings.jsonに書き込むと、Code Runnner実行時のコマンドは書き換えることができる。この設定は言語ごとに行う。cとc++では以下の通りに書く(初期設定そのまま)。

"code-runner.executorMap": {
    "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
    "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
}

個人的に実行可能形式のファイルはa.outに統一したかったのと、このままでは私の使い方では若干冗長なので、以下のように変更した。

"code-runner.executorMap": {
    "c": "cd $dir && gcc $fileName -o a.out && ./a.out",
    "cpp": "cd $dir && g++ $fileName -o a.out && ./a.out",
}

3-2.実行後すぐにターミナルにフォーカスする

初期設定ではCode Runnerを実行してもエディタがフォーカスされたままだが、settings.jsonに以下の記述を加えると実行後自動的にターミナルがフォーカスされる。
"code-runner.preserveFocus": false,
何度も同じサンプルでテストしたいときに便利。

4.まとめ

settings.jsonに次のように記述すればよい。

"code-runner.executorMap": {
    "c": "cd $dir && gcc $fileName -o a.out && ./a.out",
    "cpp": "cd $dir && g++ $fileName -o a.out && ./a.out",
},
"code-runner.runInTerminal": true,
"code-runner.preserveFocus": false,
"code-runner.terminalRoot": "/mnt/",

参考

Code Runner - Visual Studio Marketplace

haconoya
情報系B1。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした