vscodeのC++用コードスニペット
最初に余談だが、vscodeの設定箇所はいくつもあってたまにわからなくなる。User SettingとWorkspace Settingが分かれて存在している。基本的な考え方として、自分が利用する設定はUser Settingに書けばいい。Workspace Settingには、Workspace固有の設定を書くことになる。User Setting→Workspace Settingの順で適用される。設定を触りたいときは、Ctrl+Shift+Pでコマンドパレットを開いてUser Settingを探せばいい。
以下、公式の説明。
Visual Studio Code User and Workspace Settings
さて、最近atcoderをよくやっている。vscodeを使っているが、for文とかもっと早く書きたいので、vscodeでユーザ定義のcode snippetを書く方法を調べつつC++用のcode snippetを書いてみた。
公式のドキュメントは以下にある。
Creating your own snippets in Visual Studio Code
自作スニペットは、File -> Preference -> User Snippetsを選んで、自分が設定したい拡張子のファイル(今回はc++だから、cpp.json)を選んで編集すればいい。
なお、vscodeでc++を使っている場合、MSのc++用のExtensionを入れている場合も多いと思う。
以下が公式のExtension。
marketplace.visualstudio.com
公式のExtensionを入れていれば、Ctrl+Spaceで補完を呼び出したときに、使えるcode snippetがいくつか出てくる。
しかし、割ともっとアグレッシブに使いたい。後で考え直す可能性はあるが、以下の1文字スニペットを定義するためのcpp.jsonを用意した。
- m → とりあえず、main関数とかusing namespaceとか書いてくれる。#defineはgcc競プロ用だが、必要に応じて適宜変更すればOK。
- w → while(true)節に展開される。とりあえず無限ループを用意したいとき。
- f → よくありがちなfor文を書く。tabstopを適宜設定した。tabstopは、$1とかで書く。例えばiをデフォルト値として用意したいなら、${1:i}と書けばいい。
- c →ありがちなcout << value << endl;用。
- v →vector(int) A(N)
とりあえず用意したけど、後で色々変えるかもしれない。
"main function": { "prefix": "m", "body": [ "#include <bits/stdc++.h>", "", "using namespace std;", "", "int main() {", "\t${1:/* code */}", "", "\treturn 0;", "}" ], "description": "basic main function" }, "while true": { "prefix": "w", "body": [ "while(true) {", "\t${1:/* code */}", "}" ], "description": "while(true) loop" }, "basic for": { "prefix": "f", "body": [ "for(int ${1:i} = 0; ${1:i} < ${2:max}; ${1:i}++) {", "\t${3:/* code */}", "}" ], "description": "basic for loop" }, "basic cout": { "prefix": "c", "body": [ "cout << ${1:/* code */} << endl;" ], "description": "basic cout" }, "basic vector": { "prefix": "v", "body": [ "vector<${1:int}> ${2:A}(${3:N});" ], "description": "basic vector" }
次は、Shift+Alt+Fで、コード整形ができるのだが、そのフォーマットは、C++の場合、clang-formatというので細かく指定することができるようなので、それを調べて書きたいと思う。
/* 2019/1/20 追記 */
自分のclang-formatとの整合性を取る形で少し直した。(){のように詰めて書きたいが、見当たらなかったので、() {にした。