エディタ小噺~Emacsとは~
tl;tr
エディタを使ったことのない、情報系学部一年生などはEmacsではなく、vimとIDEを使ったほうがいいのではというお話です。
はじめに
Emacsを使えるようになりたいと思った私に何が起こったかと、 Emacsを使った一人の感想という形で書きます。 令和になったEmacsの現状の一部などお伝えできればと思います。 やり方などは詳しくは載せません。あしからず。
目標
Emacsさげになりすぎないようにします。 というか私のアプローチがおかしくて、Emacsの全力を出せていない感あります。 よって、指摘歓迎です。
Emacsとは
数あるエディタの一つ。 CTRLを多用するキーバインドが特徴的。
(引用 Emacs を使って,文章を書く - Linux による Web プログラミング入門)
"M-x <コマンド名入力>"(Mはメタキー,altとか)みたいにするといろいろなコマンドが使える。
Emacsの優れた点
Emacsは拡張性があります。 拡張性の源は、EmacsLispで動いていることです。 (EmacsLispが書けさえすれば)無限の機能が手に入ります。 現在は他のエディタも拡張性が高いです。
Emacsのパッケージ追加が楽しい
Emacsはパッケージ追加によって、簡単に有志が作ったパッケージを導入できます。 これにより、自分のEmacsを強くしたり、気に入ったカラーテーマに変えたりなど、 いろいろなことができます。 また設定を変えるのがEmacsLispの設定をコピペしたりして簡単にできるので、楽しくて色々入れまくった時期が私にもありました。
EmacsLispの学習曲線()
(引用 https://stackoverflow.com/questions/10942008/what-does-emacs-learning-curve-actually-look-like )
私は人が書いた設定を少し変えるくらいで1から書くことはできません。
EmacsにはGUIアプリケーションがある!
Emacs.appというGUIアプリケーションがあり、zshからaliasとか変えてEmacs.appで開くようにできます。
vim + IDEを勧める理由
Emacsのネガにならないように気をつけます。
起動の遅さ
Emacsは他のエディタに比べ、機能が盛りだくさんです。 それにより起動時間が遅いです。 はじめから拡張性を意識したemacslispによる設計である代わりに遅いという事も言えます。
サーバー化
起動の遅さをカバーするために、emacsclientというものを使ってpc起動時にデーモンとしてEmacsサーバーを起動し、それにEmacsを使いたい時に接続するということするアプローチがあります。
サーバー化して何が起こったか
emacsclientを使ってサーバー化して一つのEmacsを使うようになると、vimよりも早くEmacsが立ち上がったようにみえます。
しかし、ここで問題起こる!Emacsが固まったら面倒、、、!
結果
複数Emacsを起動していれば、一つが固まっても他は大丈夫ですが、emacsclientはそうはいきません。 結果、全ての作業が中断するということが起きます。
(Emacsは編集開始時に"hoge.txt~"というバックアップファイル、もう一つはファイル編集中に自動保存で"#hoge.txt#"みたいなファイルを勝手に作ります。これは勝手に作られてなにかの拍子に削除されずに残ることがあり、オフにする人が多くいます。指定の一箇所に保存するのが吉。)
Emacsが遅い対策
私が知るEmacsが遅いことへの対策を書きます。
設定ファイルの分割
ごりごりに改造した設定ファイルは起動時に読み込まれ、遅延の原因になります。 最初に読み込むファイルをinit-loader等で制限することで早くはなります。
別実装のEmacsを使う
Rustで実装されたEmacs、その名もRemacsというものがあります。 私は使っていませんが。
Emacsが固まるなんてあるの?
自分の場合の話です。
研究室のサーバーにpdfの本があり、自由に読めます。 自分のpcでsshログインして使えます。 しかし、サーバー上にpdfビューワーがありません。
よって読みたい本かどうか物色するには、本の名前をwebブラウザで検索するか、 あるいはダウンロードして中身を見て確認する、等をしなければなりません。
内容が興味ない場合もダウンロードするのはなにか違う気がします。 Emacsでログインして、pdfを開いてプレビューしてみようと思いやってみました。
結果、三冊開いてみて固まりました。(バッファはkillしたんだけれども、、、)
Emacsでタイポ対策が必要
私はview-modeをkeybind登録しています。これにより、すぐにview-modeに入れて、カーソル移動をしている際に意図せずコードになにか入ってしまうことを防いでいます。(vimで良くない?)
キーバインドが好きだけど、、、
Jetbrain社IDEのintelij等主要なIDEは大抵keybindの一つとしてEmacsライクなkeybindを選択できるように最初から用意してくれています。 他のエディタも拡張性が高いため、Emacsライクなkeybindに変えればそれで済むという現状があります。
vim + IDEという結論へ至る理由
私はvimチュートリアルを触った程度です。 今回は軽いエディタの例として出しています。
エディタは軽いほうがいい
エディタが重くてどうにもなりません。軽いエディタを使いましょう。
IDEはつよつよな方がいい
IDEにあってEmacs、vimでできない機能は少ないです。 しかし、IDEは著しく進化しています。 例として、Microsoft開発のエディタVisualStudioCodeはgithubのコードのデータを元に機械学習をして、強力な補完を可能にしたDart2.5というものを発表しました。使ったことはありませんが。 Announcing Dart 2.5: Super-charged development - Dart - Medium
以前からEmacsにも自動補完(intelisense,company等)がありますが、こういった高次の機能は開発元が公開して利用できるようにしてくれない限りは、補完の強力さで及ぶことは難しくなっていくでしょう。
また、統合開発環境は開発元がエコシステムとして機能同士が協調するように設計しますが、Emacsを統合開発環境に並ぶために機能追加していくと、機能同士の折衝をするのが一苦労ですし、ちぐはぐな環境になりがちです。(helm等の統合されたパッケージ群はありますが)
結論
軽作業では起動等の遅さが目立ち、 強度の必要な作業では、IDEに見劣りします。 よって、vim + IDEが今から始めるひとには良いのかなと思います。
じゃあ今Emacsを使っている人は?
安心してください。活用するべきところがあります。
それは、"登場して間もない言語を使う際に使う"です。
IDEは最新の言語をサポートするのには時間がかかります。 拡張性の高さからか、コミュニティの活発さからかわかりませんが、開発環境構築においてはEmacs(界隈の有志)はかなりの速さで対応してくれます。これはvimも同じです。 よってパッケージインポートにより簡単に開発環境を整えられます。ヤッタ-