VSCode拡張で便利なショートカットを作る(multi-command, ssmacro)
ショートカットを作るときに便利なVSCode拡張を2つ紹介します。
(わりとオレオレです。組み合わせは自由、記法はいろいろなので、他にもよいものあれば教えてください)
はじめに
想定読者
- VSCodeを使っている
- ショートカットの設定が好き
- ターミナル実行後のRedo -> 例えば ファイル編集 -> "保存、ターミナルに戻る、実行"を1操作でやりたい
他のkeybindings情報
マクロ操作やkeybindingsなど、とても詳しくて良かったです。
keybindings.jsonの準備
ここからの説明では、keybindings.json
に設定を書いていきます。
ファイルの開き方の例:
- 開き方1: 設定アイコン->Keybordshortcut->くるっと回るアイコンを押す
- 開き方2: Command Palette (Ctrl+Shift+P) から
Preferences: Open Keyboard Shortcuts (JSON)
を開く
multiCommand
VSCodeのデフォルトではできない、コマンドを繰り返す操作ができるようになる拡張です。
連続した動作のアサイン
まず通常のショートカット設定ですが、ctrl+Hに左矢印キーをアサインしています。
{
"key": "ctrl+h",
"command": "cursorLeft"
},
これを連続して実行させるコマンドがVSCodeにはないです(今後追加されるかもですが)。
multiCommandならこのように書きます。10回連続で実行しています。
{
"key": "ctrl+shift+h",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
"cursorLeft",
"cursorLeft",
"cursorLeft",
"cursorLeft",
"cursorLeft",
"cursorLeft",
"cursorLeft",
"cursorLeft",
"cursorLeft",
"cursorLeft",
]
}
},
アクティブなファイルを実行
pythonのファイルを編集したあと、保存して、実行したいときに使います。
{
"key": "alt+g",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
{
"command": "workbench.action.files.saveAll"
},
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "python ${file}\n"
}
}
]
}
},
上のを分割して説明。まず実行前に保存しています。
(saveAll
の部分は好みなのでsave
に変えていただいてもよいです)
{
"command": "workbench.action.files.saveAll"
},
ターミナルにコマンドを送る部分。${file}
がアクティブなファイル。\n
でEnter。
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "python ${file}\n"
}
}
直前のコマンドを実行
「ファイルをセーブしてターミナルに移動して下を押してエンター....」のショートカットです。
「下を押してエンター」をsendSequenceの"\u001b[A\u000d"
でやっています。
個人的に、この方法が一番役に立っています。
{
"key": "alt+x",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
{
"command": "workbench.action.files.saveAll"
},
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u001b[A\u000d"
}
}
]
}
},
参考
コピーした文字列でprint("some_var", some_var)と出力する
Pythonのprintデバッグ用に使っています。some_var
という文字列がクリップボードに入っているときにprint("some_var", some_var)
を出力します。
{
"key": "alt+ctrl+p",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
{ "command": "type", "args": { "text": "print(\"" } },
"editor.action.clipboardPasteAction",
{ "command": "type", "args": { "text": "\", " } },
"editor.action.clipboardPasteAction",
{ "command": "type", "args": { "text": ")" } }
]
}
},
おまけ:snippetを実行する
(multi-command使っているわけではなく、VSCode標準です)
スニペットの設定は先程も紹介したこちらのブログにあります。
例えばこうの設定があったとします。
"my_print_xx": {
"prefix": "p",
"body": ["print('xxxxxxxxxx')"]
},
これをショートカットにします。つけたスニペット名で登録すればよいです。
{
"key": "alt+p",
"command": "editor.action.insertSnippet",
"args": { "name": "my_print_xx" }
},
おまけ: アクティブなファイルのあるディレクトリに、ターミナル上で移動する
ポイントは、${fileDirname} がVSCodeの変数として使えることです。
{
// Change dir to where the current file is.
// Cannot use for dir with spaces in the name.
"key": "alt+d",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cd ${fileDirname}\n"
}
},
変数の紹介はこちらです。
ssmacro
VSCodeでマクロを実行できるようになる拡張です。
複雑な処理ができるのですが、私はもっぱら文字の置換に使っています。詳細は著者ページをご参考。
全角スペースを半角スペースにする
変更が面倒なので一度でできるようにしています。
わかりにくいですが、"find": " "
は全角スペース、"replace": " "
は半角スペースとしています。all, reg, flagとかはあまり気にしていません。。
[
{
"args": {
"find": " ",
"replace": " ",
"all": true,
"reg": true,
"flag": "gmi"
},
"command": "ssmacro.replace"
}
]
keybindings.json で好みのキーにアサインします。pathはフルパスにしています。
{
"key": "ctrl+7",
"command": "ssmacro.macro",
"args": {
"path": "/full/path/to/ssmacro_sample.json"
}
},
AWS用語を短く変換する
特に認定試験で、ドキュメントをコピペしていると文字が増えてきて困るな〜というときに使っていました。
以下のパターンは全てEC2
に変換されます。
Amazon EC2
Amazon Elastic Compute Cloud
Elastic Compute Cloud
Elastic Compute Cloud (Amazon EC2)
Elastic Compute Cloud (EC2)
Elastic Compute Cloud(EC2) # (の前にスペースがない
[
{
"args": {
"find": "Elastic Compute Cloud( ?\\((Amazon )*(EC2)\\))*",
"replace": "EC2",
"all": true,
"reg": true,
"flag": "gmi"
},
"command": "ssmacro.replace"
},
]
Availability Zoneの例
以下のパターンがAZ
,AZs
に変換されます。
アベイラビリティゾーン
アベイラビリティーゾーン
Availability Zone
Availability Zone (AZ)
Availability Zones
{
"args": {
"find": "Availability Zone(s)*( \\((AZs*)\\))*|アベイラビリティー*ゾーン",
"replace": "AZ$1",
"all": true,
"reg": true,
"flag": "gmi"
},
"command": "ssmacro.replace"
},
まとめ
- VSCodeのショートカットに使える拡張multi-command、ssmacoを紹介しました。
Discussion