EmacsからVS Codeへ乗り換え

こんにちは、GMOインターネット株式会社の斉藤です。
今回はEmacsからVS Codeへの乗り換えについて書きたいと思います。

はじめに

今月は勤め先のお盆休みがあったり、コロナ感染者増で完全在宅勤務への切り替えがあったりでバタバタしている月でした。そしてお盆休み中に自宅の開発環境をM1 Macに移行しました。前からやろうと思っていたのですが、さすがにアーキテクチャ変更を伴う大きな変更になるのでトラブルも予想されます。なので長めのお休みの方にやるのがベターだと判断しました。ステイホームが推奨されていますしちょうど良いですね。

いろいろトラブルはあったものの、在宅でのお仕事はM1 Mac上で行っています。勤め先からリースされている2018モデルのMacBook Proより全然パフォーマンスは良いですね。

このあたりの乗り換え話はまた機会があれば書こうと思います。

EmacsからVS Codeへ乗り換え

今回は別の乗り換えのお話しです。私は普段Emacsを使ってコードを書いていますが、去年後半から今年に書けてほぼVSCodeへ移行しました。もはやEmacsを使うのは、ターミナル内でちょっとコードを書きたいときくらいになっています。

Emacsから乗り換えるに当たって、数多くの機能拡張のお世話になっています。とくにキーバインドは手に馴染んでいるので今さら変えるのは難しいのですよね。Emacsは独自のキーバーインドを持っており、これが魅力ではあるのですがエディタの乗り換え時には大きな障壁になります。

ちなみに、私は現在以下の機能拡張を利用しています。

  • Awesome Emacs Keymap

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

  • vscode-emacs-indent

https://marketplace.visualstudio.com/items?itemName=sakapoko.vscode-emacs-indent

  • vscode-emacs-tab

https://marketplace.visualstudio.com/items?itemName=garaemon.vscode-emacs-tab

  • Emacs kill-line

https://marketplace.visualstudio.com/items?itemName=hiro.emacs-kill-line

キーバインドの変更だけでそれなりに多くの拡張を入れていると思います。ただこれでなんとか実用に耐えるキーバーインドを構築することができました。

自作の機能拡張について

一番下のEmacs kill-lineは私が作った機能拡張です。

乗り換えの際に、1つだけ私が常用しているキーバインドで既存のVS Codeの拡張には存在しないものがあったので、仕方なく自前で作りました。

EmacsはCtrl+Kで行を削除したり行の内容をコピーできます。
このキーバインドにはkill-whole-lineというオプションがあり、これを非nilにすると行頭でこのキーを叩いたときに改行文字を含めて行全体を削除すると言う挙動になります。これをエミュレートするVS Codeの拡張が存在しなかったのです。

https://ayatakesi.github.io/emacs/24.5/Killing-by-Lines.html

客観的に見て「そんな細かいこと・・・」とは思うのですが、やはり常用しているキーバインドは無くなると非常に困りますし、この拡張は100人くらいインストールされているので、世界にそれだけ困っている人がいたと言うことで・・・。

さいごに

VS Codeは機能拡張をTypeScriptで簡単に書けるのが素晴らしいですね。チュートリアルもとてもわかりやすいので、エディタ乗り換えで困っている人は自前で作ってしまっても良いと思います。

Your First Extension | Visual Studio Code Extension API

以前にGo言語向けの機能拡張を作った話もブログに書きましたので、そちらも良かったらご覧ください。

それではまた次回お目にかかりましょう。

ブログの著者欄

斉藤 弘信

GMOインターネット株式会社

2000年に同社に入社。ユーザーサポートやデータセンターでのオペレーション業務等を担当し,その後社長室などのゼネラル部門を経て,2014年9月よりクラウド/ホスティング事業のテクニカルエバンジェリストを担当。現在はWebプロモーション研究室のソフトウェアエンジニアとして勤務。得意分野はWebアプリケーションの設計/開発,Linuxサーバー構築/運用。

採用情報

関連記事