VSCode の Emacs keymaps 拡張についてのメモ

概要

Visual Studio CodeEmacs 風の操作を提供する拡張をいくつか試したが細かいところで違和感があったので、その覚え書きをメモしておく。

自分が本当に望む Emacs 風の操作を実現するためには、やはり自分で拡張を作成しなければならないようだ。NotKyon さんの Emacs Friendly Keybindings - Visual Studio Marketplace から fork するか、Pull Request を投げるのが一番目的に近いように思われる。

tuttieee さんが、かなり理想に近い Awesome Emacs Keymap - Visual Studio Marketplace を作成してくださったので、これを使っていこうと思います!!! (2019/1/11追記)

Keymap 調査

marketplace.visualstudio.com

Emacs 風にする拡張はぱっと検索しただけで11個も見つかる。はたしてどれが良いのだろうか?

  • なお、現在使用している Emacs Friendly Keymap 以外は短時間しか使用していない
  • 最終更新日が2017年以前のものは、開発停止ということにしておく

hiro-sun 系

Emacs 風拡張のうち、最も古いと思われるものが hiro-sun のものであり、その派生物も多く存在する。派生物はだいたい共通の欠点を持ち、自分のニーズに合っていない部分もよく似ている。

  • 全体的な特徴
    • pros:
      • 自分が想定している Emacs 的な操作をほぼ網羅している
    • cons:
      • よく使う C-x 2 (split-window-below) が存在しないか、Emacs と分割方向が異なる
      • たまに使う C-o (open-line) が未実装
      • たまに使う C-x C-c (save-buffers-kill-terminal) が未実装
      • Multi Cursor 機能と相性が悪い
        • Multi Cursor + 選択中に、Emacs 的な操作で選択範囲の拡縮ができない
        • (そもそも Emacs には Multi Cursor 機能がないので、仕方がない)
  • 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)

他の拡張と同時に使用するもの (2019/1/4追記)

そのほか

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 専用。VSCodemacOS で使用する場合は、デフォルトのカーソル移動キーが 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 とほぼ同じ
    • cons:
      • デフォルト機能と被るキーは定義されていない (C-f など)

Keymap ではないものの調査 (2019/1/4追記)

以下のものは、Keymap を構成せず、コマンドだけを追加する。そのため、自分で Keyboard Shortcuts (keybindings.json) を設定しなければならない。 (試用していないので、実際に期待通りの動作をするのかどうか不明)