Help us understand the problem. What is going on with this article?

VSCodeのEmacsキーバインド拡張まとめ

1. はじめに

以下の過去5年間のGoogle検索トレンド (全世界) の結果を見て下さい。もはやVSCodeが一番検索キーワードが多く、vimが健闘しているのが意外ですが、Emacsは右肩下がりです。こんなエディタ情勢の中でもあなたはEmacsを使いますか?応えはNoですよね?

image.png

とは言っても、VSCodeでも慣れ親しんだEmacsキーバインド使いたいですよね?

そんなEmacsユーザのために最新のEmacsキーバインドのExtensionを調査してみましたので、2019/12/15時点の最新情報としてまとめておきます。

2. まず結論から

一通り触ってみた結果をもとに結論から伝えておきます。

キーバインドのサポート数が一番多く機能的にほぼ問題がなく、日本人の方 (tuttieeeさん) が他と比べると頻繁に更新されているなどの理由から、Awesome Emacs Keymapが一番お勧めかと思います。

不具合や改善点があれば、githubの以下のリポジトリにissueを投稿しましょう!
https://github.com/tuttieee/vscode-emacs-mcx

たた、個人的によく使うバッファの先頭/末尾に移動するM - >, M - <が使えるものはありませんでした…

こちらは私の認識間違いでして、@tuttieee さんからコメント頂きまして、ESCではなくAltを割り当てられているとのことでした!
M - >, M - <のバッファ移動系もAwesome Emacs Keymapだと問題なく動きますね。

こちらについては、ESCと他キーの組み合わせはキーバインドとして定義できないのです…
明記されたドキュメントは見つけられませんでしたが、おそらくVSCodeの仕様上の制約です。
Awesome Emacs Keymapでは、ESCの代わりのメタキーとして、altをアサインしています。
他のVSCodeのemacsプラグインもそうしていると思います(というかAwesome Emacs KeymapのキーバインドはEmacs Friendly Keymapから拝借していまして、hiro-sunから脈々と受け継がれた流儀ですw)

3. VSCodeでも最低限使いたいキーバインド

3-1. カーソル移動

コマンド 機能
C-p 1行上に移動
C-n 1行下に移動
C-f 1文字前に移動
C-b 1文字後に移動
C-a 行先頭に移動
C-e 行末尾に移動
C-v 1画面分下に移動
M-v 1画面上に移動
M-< バッファ (ファイル) の先頭に移動
M-> バッファ (ファイル) の末尾に移動

3-2. 検索

コマンド 機能
C-s 前方検索
C-r 後方検索

3-3. 編集

コマンド 機能
C-y 貼り付け
C-d カーソルの文字を削除
C-k カーソル位置以降の文字を削除 (削除部分はクリップボードにコピーされているので、C-yで貼り付け可能)
C-Space マークセット
C-w マーク部分からカーソル位置までカット
M-% 文字検索と置換 (一つ一つ確認しながらの置換)

3-4. ウインドウ操作

コマンド 機能
C-x 2 2行に分割
C-x 3 2列に分割
C-x 0 カーソルのあるほうの分割したウィンドウを閉じる

4. Emacsキーバインドの拡張機能一覧

emacsで検索してヒットしたキーバインド系の拡張機能を上位からいくつか調査してみました。

4-1. Awesome Emacs Keymap

https://marketplace.visualstudio.com/items?itemName=tuttieee.emacs-mcx

バージョン 0.14.1 (2020/2/21)
感想 個人的には完璧です。M-> (最初/最後の行への移動) などのESCキーはVSCodeの制約から使えず、代わりにAltキーをアサインしているとのことでした。

4-2. Emacs Friendly Keymap

https://marketplace.visualstudio.com/items?itemName=lfs.vscode-emacs-friendly

バージョン 0.9.0 (2019/6/6)
感想 個人的には1行削除→Undoした後のカーソル位置が元の位置に戻らずに行末に移動するのが好みではないのと、少し動作が他に比べると遅いです。

4-3. VSCodeEmacs

https://marketplace.visualstudio.com/items?itemName=vscodeemacs.emacs

バージョン 0.8.2 (2017-10-09)
感想 ESC系のコマンドがありませんが、それ以外は大体使えたという感じです

4-4. Emacs

https://marketplace.visualstudio.com/items?itemName=nisheetjain.emacs

バージョン 0.0.9 (2016/2/12)
感想 カーソルの上下移動コマンドのC-n, C-pがカーソル移動ではなく、画面スクロールだった…

4-5. emacs-region

https://marketplace.visualstudio.com/items?itemName=t-yng.emacs-region

バージョン 1.3.0 (2017/7/17)
感想 1行削除のC-kが使えないのでNG

4-6. Emacs Keymap Improved

https://marketplace.visualstudio.com/items?itemName=rkwan94.vscode-emacs-improved

バージョン 1.1.0 (2018/8/25)
感想 ESC系のコマンドがありませんが、それ以外は大体使えたという感じです

4-7. emacs-mode

https://marketplace.visualstudio.com/items?itemName=xando.emacs-mode

バージョン 0.0.4 (2019/7/21)
感想 Undo (Ctrl-/)が使えない

4-8. Emacs Keymap

https://marketplace.visualstudio.com/items?itemName=hiro-sun.vscode-emacs

バージョン 0.1.1 (2016/11/10)
感想 例えばC+2など、画面分割系コマンドが使えない
kurun_pan
QiitaではFlutterに関する記事を投稿しています。その他の技術内容やQiita投稿記事の内容以外についての、ご意見・連絡等はTwitterの方へお願いします! 
https://kurun.booth.pm/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away