Visual Studio Codeで言語ごとに別のキーバインドを割り当てる

現代の多くのテキストエディタ同様、VSCodeでもキーバインドのカスタマイズができます。今回は、VSCodeのキーバインドのちょっと進んだ設定方法として、編集中の言語ごとにキーバインドを切り替える方法を紹介したいと思います。

動機

わたしは AsciiDocのプレビューを VSCodeでやるので、AsciiDocのプレビューをキーバインドで割り当てています。

しかし、AsciiDocのプレビューは AsciiDocの編集時以外は必要のないキーバインドです。

間違って Markdown編集時にキーバインド発動して欲しくないですし、Markdown編集時はMarkdown向けのキーバインドを割り当てたいです。

動作確認環境

  • macOS Sierra 10.12.6
  • Visual Studio Code 1.17.1

GUIでのキーバインド設定の基本方法

まずはキーバインド設定の基本方法のおさらい。

メニューから、 Code → 基本設定 → キーボードショートカット を選択

それっぽい操作名(ここでは preview) で検索し、該当するコマンドの左にある鉛筆アイコンをクリックしてキーを入力します。

GUIを使った設定方法としては以上です。

keybindings.json を使った設定の方法

今回のように、少し複雑なキーバインドを設定するには keybindings.json という設定ファイルを直接編集する方法を使います。

先程のキーボードショートカットの画面で、「次を開いて編集: keybindings.json」をクリックします。

keybindings.json の一つのキーバインドは、下記のような構成です。

key はバインドするキーで、”ctrl+shift+m” のような方法で記述します。ctrl, shift, alt, cmd が使えます。(Windows の場合は cmd の代わりに winが使えます。)

command はコマンド名で、先程のキーボードショートカットの画面で検索した時に表示されます。先程の例だと、”adoc.previewToSide” がコマンド名となります。

さいごの when はこのキーバインドが適用される条件ですが、これが今回のポイントとなります。

よくある設定としては “editorTextFocus” というように記述して、テキスト編集中のみ有効というような条件を記載しますが、ここで特定の言語を編集中のみ有効という条件が記載できます。

特定の言語を編集中のみ有効とする場合は、”editorLangId == markdown” と記載します。

ここで markdown は Markdown の ID(Language Identifier) というものです。

各言語の IDについては、一般的なものは VSCode 公式ページ に Known language identifiers として羅列されています。

ここに載っていない、拡張機能でサポートされる言語の IDについては拡張機能の「コントリビューション」の項目を見るとわかります。

左端のアクティビティバーより、拡張機能 → 拡張機能を選択 → コントリビューション と選択すると、その拡張機能でサポートされる言語のIDが分かります

AsciiDoc 編集中のみ AsciiDoc のプレビューを有効にしたい場合、キーバインドとしては以下のように記載します。

使用例

わたしが使っているキーバインドを使用例としてあげておきます。もともと Atomで慣れていたため、Markdown のプレビューといえば ctrl+shift+mです。

いちいちプレビューのキーバインド覚えるのが面倒だったので、Markdown 編集時も AsciiDoc 編集時も PlantUML 編集時も ctrl+shift+m でプレビューできるようにしました。

さいごに

今回は言語別にキーバインドを切り替える方法を紹介しましたが、それ以外にもキーバインドを有効にする条件にはいろいろ記載ができるみたいです。

また便利な使い方を見つけたら共有したいと思います。


最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。



この記事をシェアする




りゅーた
フリーランスのエンジニアしてます。Android、iOS アプリの開発、対向サーバの開発、C/C++のライブラリ開発が現在のメイン。趣味はテニス。3児の父。 もっと詳しく

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA