はじめに
こんにちは、コンテナソリューション事業部の髙井です。
前回は、GitHub Copilotをvimで使うという話を書きました。
しかし、VSCodeにCopilot Chatが来てしまったことにより、vimで使えない機能がまた発生してしまいました。
IDEから離れることなくGPTに質問できる体験は何物にも代えがたいので、今回はVSCodeのほうをvimに近づける努力をすることにします。
※GitHub Copilot Chatは現在、限定パブリックベータ版としてGitHub Copilot for Businessユーザーが利用できます。詳しくはこちらのGitHub日本語ブログを参照してください。
そもそもCopilot Chat、何が便利か
冒頭から、もう使うしかないみたいなトーンで書き始めてしまいましたが、本当に便利なんですよ。
何が便利かって、
「IDEから離れずにGPTにすぐ聞ける」
この1点のみです。
あまりにも便利なのでCopilot Chatを使って30分くらいで即ブログを書こうと決意するに至ったのですが、マジでこれしか言うことがない。
が、それほどまでに重要です。
コードを書くとき、チャカチャカと画面切り替えるの、それだけで思考が分断されて効率が落ちます。
しかしvimがなければ何もできない
いくらCopilot Chatが便利だからといってvimを手放せるわけではありません。
大量にあるキーボードのキーをなんら有効活用せず、単発のアルファベットの入力にしか利用しないなんてあまりにも無駄が過ぎます。
vimはこの点を解消するためにinsertモードとnormalモードでキーボードレイアウトを丸ごと置き換えられるようにしました。
つまり、
normalモードでは逆に文字入力のような充填率の低いキー配置は使えません。
vimでは入力がinsertモードであり、normal(=通常)モードでは文字入力などさせないのです。文字入力なんて脇役です。
vimはアルファベットの入力だけではなく、より頻度の高い編集と移動に重きを置いているのです。果てしない合理性です。
たとえば、これまで「f」というアルファベットを入力する以外はホームポジションを表すぐらいしか能のなかったFキーにカーソルジャンプの機能を付与するのです。
まさにキーボードのフル活用、すべてのキーに羽を授ける究極のSDGsです。
しかしvimはWindowsのショートカットキーと相性が悪い
Mac端末だと、controlとcommandが分離していて、多くのショートカットキーがcommandに紐づくため、vimでcontrolを使用することになってもあまり不都合がありません。
また、一部のEmacsキーバインド(control+FBPN等)が標準で使えたりして、CapsLockの位置にcontrolがあるようなまともなキーボードさえ用意することができれば快適な入力環境を即座に手に入れることができます。
もし、キーボードが標準的な配列であったとしても、そもそもOSの機能でCapsLockとcontrolの入れ替えもできるので、ほぼ問題なしです。
一方で、WindowsはVimmerにとって鬼門です。ほとんどのショートカットキーが衝突します。また、標準でEmacs的なカーソル移動もできないため、このあたりも対処が必要です。
個人的に、control+hでbackspaceにならないのは入力環境として全く用をなさないため、vimのキーバインドと合わせてすべて対処する必要があります。
HHKB + Fakeymacs + VSCode Neovimで、Mac環境に近いキー入力体験を実現する
手順①:HHKBを購入する
まず、HHKBを用意します。
3万円以上しますが、開発を志すにあたって入力端末を妥協してはいけません。体に触れるものはお金を惜しむな、という教えをよく聞きますね。
少しくらい食費を削って高級キーボードを買っても人間は死にませんが、ちゃんとしたキーボードがないと開発が滞り、仕事の成果が出ず、降格し、結果的に食うに困りますので、買う以外の選択肢はないです。
という冗談はともかくとして、HHKBでは、付属のキーバインドツールを使用して、任意のキーバインドを使用できます。
通常のキーボードでもレジストリをいじれば同じようなことが可能ですが、HHKBでは端末側を変更するだけで済むので会社勤めの従業員としてはもってこいです。
このとき、通常CapsLockがある位置に「右Ctrl」を割り当てるといいでしょう。通常のCtrl系ショートカットは左Ctrlを右Winキーなどに割り当てることで、このあと使うFakeymacsにより動作を分離できます。
手順②:Fakeymacsを導入する
Keyhacというソフトウェアをベースにした、Fakeymacsというものがあります。
これは、Windows上でEmacsキーバインディングを有効化するためのソフトウェアです。
Fakeymacsを使用すると、IDEを開いていない状況でも常にCtrl+FBPN,H,E,Aなどが使用可能になります。
あなたは「入力中に文字を削除する」という頻出行為を、キーボードのはるか端っこにあるBackspaceキーを押して実行していませんか?
現代文明に生きる聡明なあなたは、そんな非合理を許してはなりません。
Ctrl+H、これです。ホームポジションから手を動かさずに文字を消してください。
ただし、Fakeymacsは標準状態だと機能が豊富すぎて、それはそれでvimの操作と衝突するので、config.pyをいじって各位にちょうどいい状態に調整してください。
たとえばvimでcontrol+Aを使用すると数値のインクリメントなどができますが、何も考えずにFakeymacsを導入すると「文頭に移動する」動作と衝突します。
適宜、VSCode起動時は無効にするキーとして指定し、vim側の設定でinsertモード時のみ復元するなどの工夫を施しましょう。
本家をForkして、私個人で設定している内容を反映したリポジトリを貼っておきます。
手順③:VSCode Neovimを導入する
さて、ここまで設定して、ようやく安心してvimキーバインドを導入することができます。
VSCodeでvimキーバインドを使用するのに、vscodevimとVSCode Neovimがあります。
が、私はVSCode Neovimのほうをオススメします。
というのもvscodevimのほうはvim動作をシミュレートしているのですが、VSCode Neovimのほうは裏でNeovimを起動して直接インテグレートしているようです。
※私自身、それぞれの実装を詳しく見ているわけではないのですが、以下の記事を参考にしました。
その動作原理から、WSL等にNeovimを自分でインストールし実行パスを設定として渡す必要がありますが、そのぶんvim動作がかなり再現できるのでこれを使わない手はないでしょう。
おわりに
以上で、レジストリの変更をせずともある程度快適なキー入力をすることができると思います。
この組み合わせを見出すためにけっこう苦労したので、多少は参考になると嬉しいです。
私達ACS事業部はAzure・AKSを活用した内製化のご支援をしております。ご相談等ありましたらぜひご連絡ください。
また、一緒に働いていただける仲間も募集中です!
切磋琢磨しながらスキルを向上できる、エンジニアには良い環境だと思います。ご興味を持っていただけたら嬉しく思います。