LoginSignup
4
0

More than 1 year has passed since last update.

Visual Studio 2022 をEmacsキーバインドで使う

Last updated at Posted at 2022-09-19

概要

普段VSCodeにEmacsキーバインドの拡張機能を入れてコーディングを行っているのですが、VS2022を使う機会が増えてきたので、VSでも同じようなキーバインドを使いたいと思いいろいろ設定したので、メモとして残します。

拡張機能

なにはともあれ、Emacsキーバインドを使用できるようにする拡張機能を入れます。

Marketplace の Emacs Emulation

まずVisual Studio Marketplace に公開されている Emacs Emulationを入れたのですが、こちらではset-markで選択した範囲を一括で削除することができませんでした。

Fork版 Emacs Emulation

いろいろ探してみたところ、以下の記事を見つけました。
Visual StudioのEmacs Emulationで選択範囲を一気に消せるぞ! - プログラムdeタマゴ
現在MarketplaceにアップされているソースをForkして、選択範囲削除をできるように変更されている方がいらっしゃるようです。(ありがたい)
記事に紹介されているリポジトリのdelete-selection-modeブランチをビルドして、インストールするとうまく動作してくれました。
※ ちゃんと会話内容を追い切れていないようですが、この変更はmainブランチへとはマージされていないようです。(従来と挙動が変わるため設定などでユーザーが切り替えを行えるようにする必要があるというのが理由?)

その他キー割り当て

その他、使用しているVSCodeのEmacs拡張機能(Awesome Emacs Keymap)と自分のVSCodeの環境と似たような使い心地になるようにキー割り当てを行いました。

  • Ctrl + HでBackspaceできるようにする
    • 「編集.後退削除」にCtrl + Hを割り当て
  • Ctrl + Aでの移動先を行の先頭ではなく、インデントの先頭に変更する(デフォルトの行頭移動になるので、set-markが切れてしまう)
    • 「編集.Emacsの行頭に移動」のキー割り当てを削除
    • 「編集.行頭に移動」にCtrl + Aを割り当て
  • Ctrl + P/Ctrl + Nでインテリセンスの補完や入力候補を上下選択できるようにする
    ⇒下移動(Ctrl+N)と行頭移動(Ctrl+A)を連続して入力すると、Ctrlを拾いきれず、'e'が入力されてしまうことが分かったので、設定を削除
    • 「編集.Emacsの1行上へ」/「編集.Emacsの1行下へ」を削除
    • 「編集.1行上へ」/「編集.1行下へ」にCtrl + P/Ctrl + Nを割り当て
  • Ctrl + GでEscape と同じ挙動にする(入力候補の取り消しがEmacs Emulationの拡張ではできなかった)
    Ctrl + P/Ctrl + Nの連続入力問題と同様に削除
    • Microsoft PowerToys (MS Storeリンク)をインストールし、 Keyboard Manager で Visual Sutdio (devenv)を使用中はCtrl + GをEscに割り当て
      CtrlL + GESCと同じコマンドを割り当てることで、入力候補の非表示が可能だったので、それらを割り当て
      • 「ウィンドウ.ドキュメントウィンドウをアクティブにする」(全体)
      • 「編集.選択範囲の取り消し」(テキストエディター)
      • 「編集.選択範囲の取り消し」(マネージドリソースエディター)
      • 「編集.選択範囲の取り消し」(設定デザイナー)
        image.png

課題

現状の設定でコーディングすることに関してはかなりいいところまで来ているのですが、いくつか課題があります。

Ctrlキーによる入力候補の半透明化

VSにはCtrlキーを押し続けると、インテリセンスの補完候補を半透明にしてくれるという機能があるのですが、これがCtrlを多用するEmacsキーバインド使いには候補の見え方が変わってしまい、見づらいです…。
よい拡張機能、設定などあれば知りたい…。

image.png

公式のDeveloper Communityでも投稿がありましたが、まだまだ進展はないようです…。

tab + tabでスニペットを挿入できない

Visual Studioではスニペットを挿入するのにtab + tabを使用するのですが、どうもEmacs Emulationsがtabキーを何か上書きしているようで、スニペットの挿入をうまくできません。
スニペットの挿入自体はほかのコマンドが用意されているので、そちらを使えばよいですが、tab + tabのようにコーディングしながら流れるように使えないので、少し不便です。

image.png

XAMLファイルの空行でtabインデントを行うと例外が発生する

XAMLファイルで以下の赤枠で囲ったような空白行でtabキーを押すと、例外が発生してVSごと落ちてしまいます。
これが地味にストレスで、手癖でtabキーを押してしまうとVSを再起動しなくてはいけません。
こちらでも質問にあげていました。
image.png

解決策1(設定で回避)

設定などで回避できないかといろいろ試したところ、XAMLのインデントを"ブロック"に設定していると、この問題は起こらなさそうだったのですが、インデントが個人的にきれいにされないと感じたので断念しました。
image.png

解決策2(拡張機能を修正する)

拡張機能のソースをクローンして、落ちる部分を無理やり直しました。
ソースと内容は別の記事に書こうと思います。
以下のコミットで修正しています。ご参考まで。

まとめ

VSでEmacsキーバインドを設定するのにいろいろとやったことをまとめてみました。
VSCodeは情報があふれているのですが、VSは情報を入手するのにかなり苦戦してしまいました。
ほかにもよい設定などあれば、いろいろな設定を試してみようと思います。

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0