Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@haconoya

【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

6
Help us understand the problem. What is going on with this article?
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
haconoya
情報系B2

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?