vscodeでatcoder自動化(c++)
前提
wslの導入
online-judge-tools、atcoder-cliを導入し、accコマンドやojコマンドを使える状況にある
環境はwindows10 wsl vscode、MacとかLinuxとかでも同じようなやり方で多分できる
目標(ショートカットキーは任意に変更可能)
「ctrl + alt + i」でコンパイルとテストケース実行
「ctrl + alt + o」で提出
「ctrl + alt + y」でコンパイルしてテストケースに正解したら提出
どう便利か
今まではonline-judge-tools, atcoder-cliでacc sやoj tを打って提出、テストしていたが、そのためには対象のファイルのディレクトリにcdを使って移動しなければならなかった、しかし今回のものを実装するといちいちディレクトリに移動しなくてもファイルを開いているだけでそのファイルを対象としてコンパイル、テストケース実行、提出することができる
方法
vscodeのtasks.jsonにbashコマンドを打たせる
2020/06/24 追記 下二つの.shファイルに#!/bin/bashを書いていなかったので修正
tasks.json, keybindings.jsonファイルをそれぞれ書き換える
指定するシェルスクリプトは以下のように書いてworkspace直下に配置する
nameの部分は各自のPCで適宜書き換えてください
code:cptest.sh
cd $1
/home/name/.local/bin/oj t
exit 0
code:cpsubmit.sh
cd $1
/mnt/c/Users/name/AppData/Roaming/npm/acc s
exit 0
code:test_submit.sh
cd $1
/home/name/.local/bin/oj t
echo "failed"
else
/mnt/c/Users/name/AppData/Raming/npm/acc s
fi
code:tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "test",
"type": "shell",
"options": {
"shell": {
"executable": "C:\\Windows\\System32\\wsl.exe"
}
},
"command": "g++",
"args": [
"`wslpath",
"'${file}'`",
"-o",
"`wslpath",
"'${fileDirname}\\a.out'`",
"&&",
"bash",
"`wslpath",
"'${workspaceFolder}\\cptest.sh'`",
"`wslpath",
"'${fileDirname}'`"
]
},
{
"label": "submit",
"type": "shell",
"options": {
"shell": {
"executable": "C:\\Windows\\System32\\wsl.exe"
}
},
"command": "bash",
"args": [
"`wslpath",
"'${workspaceFolder}\\cpsubmit.sh'`",
"`wslpath",
"'${fileDirname}'`"
]
},
{
"label": "test_submit",
"type": "shell",
"options": {
"shell": {
"executable": "C:\\Windows\\System32\\wsl.exe"
}
},
"command": "g++",
"args": [
"`wslpath",
"'${file}'`",
"-o",
"`wslpath",
"'${fileDirname}\\a.out'`",
"&&",
"bash",
"`wslpath",
"'${workspaceFolder}\\test_submit.sh'`",
"`wslpath",
"'${fileDirname}'`"
]
}
]
}
code:keybindings.json
[
{
"key": "ctrl+alt+i",
"command": "workbench.action.tasks.runTask",
"args": "test"
},
{
"key": "ctrl+alt+o",
"command": "workbench.action.tasks.runTask",
"args": "submit"
},
{
"key": "ctrl+alt+y",
"command": "workbench.action.tasks.runTask",
"args": "test_submit"
}
]
以上です
テストケースで実行したいファイルや提出したいファイルを開いている状態でショートカットキーを押すと実行されます.