VSCode で Emacs キーバインドを使う方法と設定
こんにちわ。
VSCode 人気ですね。
開発現場では Web 系エンジニアのほとんどが VSCode を使っている印象です。
「令和元年の注目エディタは!?】決定版!2019 年の人気エディタランキング」を読むと、VSCode が Vim を抜いて1位に輝いています。
とにかく、カスタマイズしなくてもスタイリッシュで軽量に動作するし、拡張機能の開発も活発です。「細かくて伝わらない(広まらない)」便利な拡張機能もたくさん開発されています。例えば、「クリップボードのスクリーンショットを画像にして保存する Paste Image」という拡張機能があったりします。
私は長年 Emacs を使ってきましたが、拡張機能が豊富で導入しやすいという理由で VSCode に乗り換えました。
Emacs から VSCode に乗り換えて、一番最初に VSCode で実現したいのが、Emacs キーバインドです。C-n
で「次の行へ移動」やC-h
で前方削除、といった基本的なキーバインドのことです。
本記事では、いくつかある Emacs キーバインドの拡張機能の中で一番おすすめの拡張機能を紹介します。そして、設定や簡単な使い方も紹介していきます。
Emacs キーバインドの拡張機能
VSCode のマーケットプレースで「emacs」で検索するといくつかの拡張機能がヒットします。
その中で一番おすすめなのは「Awesome Emacs Keymap」です。
おすすめの理由は、今もメンテナンスが続いていること。他の拡張機能は2、3年前から更新がないものが多い中、Awesome Emacs Keymap は今もメンテナンスされています。
また、他の Emacs キーバインドの拡張機能を参考に開発されているので、いいとこ取りしています。
インストールはマーケットプレースから簡単にできるので解説しません。マーケットプレースからインストールしてください。
おすすめ設定
ここからは Awesome Emacs Keymap をインストール後にやっておきたいカスタマイズを紹介します。
Mac のC-SPC
を潰す
Mac では C-SPC
が 「入力ソースの切り替え」に割あたっており、Emacs のマークセットが使えません。
そこで、OS に登録されているショートカット C-SPC
をオフにしましょう。
「システム環境設定」「キーボード」「ショートカット」「入力ソース」と進み、下の画像のように「前の入力ソースを選択」(C-SPC
)をオフにします。
OS ライクなコピー&ペーストを実現する
Emacs 以外のアプリのコピー&ペーストはC-c C-v
なので、アプリ間でコピーするときに間違って、C-c
やC-v
を使ってしまうこと多くないですか?
私はよく誤ってしまい困ってました。
特に多いのは、ブラウザでソースコードをC-c
でコピーしてから、Emacs に戻ったあと、ペーストしようと間違ってC-v
を押してしまい、次ページへ移動してしまってイラッとすることです。
私は Emacs のヘビーユーザではないので、Emacs 以外で作業することが多く、アプリ間の移動でキーバインドが混乱しちゃうことが多くて。
そこで、私は Emacs でもC-c C-v
をコピー&ペーストに割り当ててました。
VSCode でも同じようにできる方法を調べたので紹介します。
実現するには、VSCode のショートカットを変更します。
M-x
でOpen Keyboad Shortcuts (JSON)
を実行して、keybindings.json
を開いて、以下の設定を追加します。
// fit the GUI apps
{
"key": "ctrl+c",
"command": "execCopy"
},
{
"key": "ctrl+v",
"command": "execPaste"
},
{
"key": "ctrl+shift+n",
"command": "emacs-mcx.scrollUpCommand",
"when": "editorTextFocus && !suggestWidgetVisible"
},
{
"key": "ctrl+shift+p",
"command": "emacs-mcx.scrollDownCommand",
"when": "editorTextFocus && !config.emacs-mcx.useMetaPrefixMacCmd && !suggestWidgetVisible"
},
これで Awesome Emacs Keymap を適用した VSCode でもC-c C-v
でコピー&ペーストできるようになります。
そして、もともとC-v
に割り当てられていた「次のページへ移動」をC-N
にし、ついでに反対方向の「前のページへ移動」をC-P
に割り当てています。これは Vim キーバインドからヒントを得て、「大文字なら極端な動作」としています。C-n
が下の行なのをC-N
なら次ページへ移動という具合です。
知っておきたいキーバインド
Awesome Emacs Keymap で使える Emacs キーバインドは、「tuttieee/vscode-emacs-mcx」で確認できます。
ここからは、その中でも私が「へぇー」と感心したキーバインドを紹介します。私は Emacs のライトユーザなので、 Awesome Emacs Keymap で初めて知った元祖 Emacs のキーバインドもあります。
キルリング関係
キルリングは、履歴を管理しています。C-k
や M-w
でコピーしたときの履歴です。
ですが、私は Emacs 時代、履歴を1つしか使いこなせていませんでした。C-k
または M-w
でコピーして、C-y
でペーストするだけです。
実は便利なキーバインドとして M-y
がありました。例えば、
- 「りんご」を
M-w
でコピー - 「ごりら」を
M-w
でコピー - 「らっこ」を
M-w
でコピー
しておけば、
C-y
で「らっこ」がペーストされる- 続けて、
M-y
で「ごりら」に切り替わる - 続けて、
M-y
で「りんご」に切り替わる
と、過去コピーした履歴からペースト(Emacs ではヤンク)できます。
コピー&ペーストで使えるキーバインドを整理すると、以下のとおりです。
キーバインド | 内容 |
---|---|
C-k |
行のカット(削除&コピー) |
M-w |
コピー |
C-y |
一番新しい履歴をペースト |
M-y |
一つ前の履歴に変更 |
マークセットの履歴
キルリングと同じようにマークセットも履歴で管理されています。
C-SPC C-SPC
でマークセットして、C-u C-SPC
で履歴をたどれます。マークセットの C-SPC C-SPC
の2つ目の C-SPC
はマークセットの選択解除です。なので、C-SPC C-g
でキャンセルするのと同じです。
マークセットを繰り返していけば、履歴として記録されていきます。
C-u C-SPC
で履歴を新しい場所からたどっていけます。注意点は、C-u C-SPC
で取り出すとマークセットの履歴から削除されることです。キルリングはペーストしても履歴に残りますが、マークセットは消えていきます。
このマークセットの履歴の機能を使えば、あとで戻ってきたい場所で C-SPC C-SPC
でマークセットしておけば、C-u C-SPC
で戻ってこれます。簡易なブックマークと考えることができます。
もう一つマークセットでおすすめなのは、C-x C-x
で直前のマークセットから実行した場所までを選択状態にします。普通にC-SPC
でマークセットして選択すればいいかと思うかもしれませんが、C-s
や ace-mode などの移動系の機能と相性がいいです。
例えば、
C-SPC C-SPC
でマークセットして、- ace-mode で目的の行へ移動して、
C-x C-x
で選択状態にして、M-w
でコピー
といったことができるようになります。
マークセット関連のキーバインドを整理すると以下のとおりです。
キーバインド | 内容 |
---|---|
C-SPC C-SPC |
マークセット(+解除) |
C-u C-SPC |
マークセットの履歴をたどる |
C-x C-x |
直前のマークセットから現在位置までを選択状態にする |
他にも
Awesome Emacs Keymap で使える Emacs キーバインドがあるので、「tuttieee/vscode-emacs-mcx」で確認してみてください。
まとめ
本記事では、
VSCode でおすすめの Eamcs キーバインドの拡張機能 Awesome Emacs Keymap を紹介しました。
また、おすすめの設定とキーバインドも紹介しました。
もし、私のように Emacs のヘビーユーザーではなく、Emacs キーバインドに馴染んでしまって Emacs を手放せないなーという人は、本記事を参考に VSCode へ乗り換えてはいかがでしょうか。
最近のコメント