VSCode の Emacs keymaps 拡張についてのメモ
概要
Visual Studio Code で Emacs 風の操作を提供する拡張をいくつか試したが細かいところで違和感があったので、その覚え書きをメモしておく。
自分が本当に望む Emacs 風の操作を実現するためには、やはり自分で拡張を作成しなければならないようだ。NotKyon さんの Emacs Friendly Keybindings - Visual Studio Marketplace から fork するか、Pull Request を投げるのが一番目的に近いように思われる。
tuttieee さんが、かなり理想に近い Awesome Emacs Keymap - Visual Studio Marketplace を作成してくださったので、これを使っていこうと思います!!! (2019/1/11追記)
Keymap 調査
Emacs 風にする拡張はぱっと検索しただけで11個も見つかる。はたしてどれが良いのだろうか?
- なお、現在使用している Emacs Friendly Keymap 以外は短時間しか使用していない
- 最終更新日が2017年以前のものは、開発停止ということにしておく
hiro-sun 系
Emacs 風拡張のうち、最も古いと思われるものが hiro-sun のものであり、その派生物も多く存在する。派生物はだいたい共通の欠点を持ち、自分のニーズに合っていない部分もよく似ている。
- 全体的な特徴
- Emacs Keymap - Visual Studio Marketplace (2016/2/16 ~ 11/10) 開発停止
- hiro-sun
- Emacs Keymap Improved - Visual Studio Marketplace (2017/7/23 ~ 8/25) 開発停止
- rkwan94, Robert Kwan (forked from hiro-sun)
- cons:
- マウスで範囲選択後に M-w しても、範囲選択状態が継続してしまう
- Emacs HJKL - Visual Studio Marketplace (2017/6/7 ~ 22) 開発停止
- dotWaldemr, Waldemar D. (forked from hiro-sun)
- cons:
- 移動が HJKL
- 明示的に fork していないが、実際には hiro-sun のものからの fork だと思われる
- Emacs Mininum Keymap - Visual Studio Marketplace (2018/6/19)
- jamesyang999, futurist (forked from hiro-sun)
- cons:
- 移動系のコマンドのみを実装
- Emacs Keybindings with S-exp - Visual Studio Marketplace (2018/8/22 ~ 23)
- haruhi-s (forked from hiro-sun)
SebastianZaha 系 (forked from hiro-sun)
- Emacs Friendly Keymap - Visual Studio Marketplace (2017/3/9 ~ 10/10) 開発停止
- SebastianZaha, Leaping Frog Studios (forked from hiro-sun)
- 現在使用中
- Emacs - Visual Studio Marketplace (2018/4/8)
- VSCodeEmacs (forked from SebastianZaha (forked from hiro-sun))
- cons:
- ドキュメントが存在しない
- 明示的に fork していないが、実際には SebastianZaha のものからの fork だと思われる
- Emacs Friendly Keybindings - Visual Studio Marketplace (2018/12/2)
- NotKyon (forked from SebastianZaha (forked from hiro-sun))
- pros:
- C-x 2 (split-window-below), C-x 3 (split-window-right) の画面分割が Emacs とほぼ同じ
他の拡張と同時に使用するもの (2019/1/4追記)
- Emacs Candies - Visual Studio Marketplace (2017/7/31) 開発停止
- Giyya Pan
- Emacs Keymap (hiro-sun) と同時に使用する
- cons:
- cursorHome, killToEndOfLine を付け加えているのみ
- EmacsPigmee - Visual Studio Marketplace (2018/3/5 ~ 6)
- naturallucky
- Emacs Friendly Keymap (SebastianZaha) と同時に使用する
そのほか
- emacs-region - Visual Studio Marketplace (2016/4/2 ~ 2017/7/17) 開発停止 (2019/1/4追記)
- t-yng
- cons:
- M- 系のキーバインディングがほとんど定義されていない
- emacs-functions - Visual Studio Marketplace (2016/11/4 ~ 2017/2/18) 開発停止
- VSmacs - Visual Studio Marketplace (2017/2/26 ~ 11/25) 開発停止
- kpping, Krittanan Pingclasai
- cons:
- M- 系のキーバインディングが定義されていない
- VSCode Emacs Flavor - Visual Studio Marketplace (2018/5/25 ~ 6/2)
- tommas1988, Tommas Yuan
- cons:
- M-f, M-b が動作しない (エラーメッセージが表示される。bug?)
- emacs-region - Visual Studio Marketplace (2018/6/10) (2019/1/4追記)
- ayrtonmassey, Ayrton Massey (forked from t-yng)
- cons:
- M- 系のキーバインディングがほとんど定義されていない
- Emacs Extras - Visual Studio Marketplace (2018/10/5 ~ 12/7) (2019/1/4追記)
- youngderekm, Derek Young
- cons:
- ごく一部の機能しか実装されていない
- Awesome Emacs Keymap - Visual Studio Marketplace (2019/1/6 ~ 11) (2019/1/11追記)
- tuttieee, Yuichiro Tsuchiya
- pros
- Multi Cursor 機能と相性が良いように作られている
- C-x 2 (split-window-below), C-x 3 (split-window-right) の画面分割が Emacs とほぼ同じ
- この拡張単体で動作する (aki77は単体では定義されていない機能が多い)
- cons
- いくつかのバグ or 未実装 (issue を投げた)
macOS 専用 (2019/1/12追記)
- vscode-emacs-ergomac - Visual Studio Marketplace (2018/3/15) (2019/1/4追記)
- RumataEstor, Dmitry Belyaev (forked from SebastianZaha (forked from hiro-sun))
- SebastianZaha のものから C- を ⌘- に置き換えたもの。
- nemacs - Visual Studio Marketplace (2016/7/1 ~ 15) 開発停止 (2019/1/4追記)
- Tiny Emacs - Visual Studio Marketplace (2018/7/8 ~ 24)
- aki77
Emacs Keymap (hiro-sun) と同時に使用する (ドキュメントに書かれていないので推測)- いままで誤解していたのだが、この拡張はおそらく macOS 専用。VSCode を macOS で使用する場合は、デフォルトのカーソル移動キーが Emacs っぽいバインディングになっているらしいのでそのあたりはわざわざ定義していないと思われる (2019/1/12追記)
- pros:
- Multi Cursor 機能と相性が良いように作られている
- Multi Cursor で複数の選択範囲を有している際に、C-f で選択範囲を拡大したり C-b で選択範囲を縮小したりできる
- C-x 2 (split-window-below), C-x 3 (split-window-right) の画面分割が Emacs とほぼ同じ
- Multi Cursor 機能と相性が良いように作られている
- cons:
- デフォルト機能と被るキーは定義されていない (C-f など)
Keymap ではないものの調査 (2019/1/4追記)
以下のものは、Keymap を構成せず、コマンドだけを追加する。そのため、自分で Keyboard Shortcuts (keybindings.json) を設定しなければならない。 (試用していないので、実際に期待通りの動作をするのかどうか不明)
- VS Code Mark/Point - Visual Studio Marketplace (2016/1/5) 開発停止
- set-mark-command
- multi-cursor-emacs-mark - Visual Studio Marketplace (2017/8/23 ~ 9/2) 開発停止
- set-mark-command 関連のコマンド。Multi Cursor をサポートしている。
- vscode-emacs-tab - Visual Studio Marketplace (2017/11/15 ~ 12/2) 開発停止
- TAB を入力したときの挙動を Emacs っぽく (indent-for-tab-command) するコマンド