こんにちは、落合です。
これは、 TECHSCORE Advent Calendar 2016 TECHSCORE BLOG の25日目の記事です。
Emacs を使おうとしてその良さを体験する前に、使うことを断念した方は結構いらっしゃるのではないでしょうか?
私も過去に何回か使い始めようとして、断念した経験があります。
「 Emacs とは、エディタではなく環境」 をググったりすると沢山でてきますが、その理由は例えば、
- メールを読む
- Web サイトをブラウジングする
- Twitter を利用する
など、エディタ用途以外のことも柔軟にカスタマイズ出来るからだと思います。
公式の文書などでは見つかりませんでしたが、使えば使うほどそれは納得できます。
そういうわけで、100人いれば100人、用途も設定も異なります。
この記事は、”私の場合はこうした” という一つの事例になりますが、何かのお役に立てれば嬉しいです。
私が Emacs を使う主な理由
- Unix のシェルの操作を Emacs モード で使っていて、そのキーバインドに慣れていたので Emacs を使いたかった。
- Linux , Mac , Windows の異なる OS 間で、無料で且つ共通のエディタが欲しかった。
特に 2. について、 Emacs の設定や、操作感を統一したいと思っていました。
その思いを胸に、Emacs を使い始めたわけですが、いろいろ工夫する必要があり、断念しては再トライを最初の頃は繰り返していました。
Emacs は、インストールしたてのデフォルト状態だと、便利どころか、苦痛でしかないと私は感じています。
ですのでカスタマイズをし始めるのですが、いくつかの壁にぶち当たってしまいました。
ぶち当たった壁
- 多用するキー入力が物理的にヘンタイ過ぎる!
- インストールしたてのデフォルトの状態では、エディタとして非常に使いにくい!
- 設定をカスタマイズしようと思ったら、 Emacs Lisp が括弧だらけで、よくわからない!
- 異なる OS 環境で、さくっと導入(設定ファイルのコピペ程度で)したいけど、難しい!
上記の壁について、”私の場合はこうした” をざっくりご紹介していきます。
1.多用するキー入力が物理的にヘンタイ過ぎる!
- Control キー
- Alt キー ( Emacs では Meta キーとして利用する)
は間違いなく多用することになります。特に Control キーの物理的な配置の改善は必須です。
Control キーを A キー の左に配置するのが常套手段です。
私の場合は、 HHKB (こちらの記事参考) を購入してハードウェア的に解決しました。
これで、
- Conttrol キーは、左手の小指
- Alt キーは、右手の小指
で押しています。
また、高価なキーボードを購入しなくてもソフトウェア的にキーボードのキー配置を変更することも可能ですので、その場合はググってみてください。
2. インストールしたてのデフォルトの状態では、エディタとして非常に使いにくい!
例えば、以下のような機能は、 Emacs インストール後、比較的早い段階で、使いにくいと感じたので改善しました。
◯よく使う機能なのに、キーバインドに割当てが無いもの
文字の右側から左へ削除する
1 2 |
;; mini buffer 内も含めて C-h を Backspace へ割当てる (define-key key-translation-map (kbd "C-h") (kbd "<DEL>")) |
これで、 Linux / Unix のシェル(Emacs モード)と同じ動作になりますよね。
Redo を C-M-/ で利用可能にする
1 2 3 |
;; redo+.el を追加で導入して利用する (require 'redo+) (global-set-key (kbd "C-M-/") 'redo) |
長い1行を、自動折り返し する/しない を C-c l で切り替えする
1 2 3 4 5 6 7 8 |
;; toggle-trancate-lines関数を作って、トグル動作させる。 (global-set-key (kbd "C-c l") 'toggle-truncate-lines) ; ON/OFF (defun toggle-truncate-lines () (interactive) (if truncate-lines (setq truncate-lines nil) (setq truncate-lines t)) (recenter)) |
◯キーバインドに割り当てられてはいるが、非常に使いづらい機能
分割したウィンドウサイズの幅を縮める
デフォルトでは、
1 |
C-u -1 C-x ^ |
ですが、こんなの一回一回押せますか? 正気の沙汰じゃないですよね......。
私の場合は、win-switch.el を追加導入して Emacs Lisp で拡張させました。
◯当たり前のように有功にしておきたい機能
常時行数表示させる
1 2 3 4 |
;; 標準で利用可能な linum-mode をオンにする (require 'linum) (global-linum-mode t) (setq linum-format "%3d ") |
これらは、私の場合の一例ですが、デフォルトだと、”そんなこともパッと出来ないのか?" が結構あります。
3.設定をカスタマイズしようと思ったら、 Emacs Lisp が括弧だらけで、よくわからない!
とりあえず Web などの文献に出てくる、 init.el のサンプルなどで何が書かれているか位を把握できれば良いと思います。
◯ざっくり理解しておきたい Emacs Lisp の作法
関数をロードする
1 |
(require 関数名) |
関数呼び出し
1 |
(関数名 (引数)) |
Emacs に標準で組み込まれている関数はインストール後いきなり(require しなくても)利用可能です。
関数の引数について(とてもざっくりとは......)
1 2 3 |
nil :トグル切り替えの関数に、nilを与えると、オンであればオフ、オフであればオンになります t :関数利用をオンにしたい時 0 :関数利用をオフにしたい時 |
新しく関数を定義する
1 |
(defun 関数名 (引数) "説明文字列" 処理内容) |
変数に値を設定する
1 |
(setq 変数名 値) |
特定のタイミングで呼び出される関数を登録する
1 |
(add-hook 'フック変数 '実行したい関数) |
フック変数で、様々なタイミングが指定可能ですので、この辺 を参考にしてください。
キーバインド割当て
いろいろな書き方がありますが、とりあえず、 global-set-key と、kbd 関数 を組み合わせた以下の書き方だけ知っておけば良いと思います。
1 |
(global-set-key (kbd "登録したいキーバインド") '割り当てたい機能) |
上記あたりをざっくりと理解しておけば、当面困りませんでした。
4.異なる OS 環境で、サクッ と導入(設定ファイルのコピペ程度で)したいけど、難しい!
どの OS でも、できる限り init.el の内容を同じにし、Emacs のインストールの直後に .emacs.d/init.el にペリっと貼りつけて起動するだけで必要なものがインストールされて、カスタマイズされた Emacs が立ち上がるように工夫しました。
◯ Emacs バージョン24 以上を利用する
はじめから、 パッケージ管理や、テーマのカスタマイズに便利なものが利用できるので、設定ファイルがとてもすっきりします。
Emacs を拡張するための Emacs Lisp を、起動時に自動インストールさせる
Emacs バージョン24 以上であれば、 package.el が最初から利用できて以下の感じで簡単に実現できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
;; 自動パッケージインストール (defvar my-install-package-list '(redo+ recentf-ext smooth-scroll open-junk-file auto-complete win-switch ddskk) "上記に起動時に melpa からインストールしたい Emacs Lisp パッケージを並べる") (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) (add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t) (package-initialize) ; インストールされていれば、次回以降インストールさせない。 (unless package-archive-contents (package-refresh-contents)) (dolist (pkg my-install-package-list) (unless (package-installed-p pkg) (package-install pkg))) |
◯日本語入力システムを統一する
- Linux , Mac , Windows の各 OS の標準の日本語入力システムが異なる。
- 日本語入力中に、コマンドを入力しても効かない。
上記の問題を解消するために、 Emacs 上の日本語入力システムを OS とは独立させることにしました。
Daredevil SKK(DDSKK) の導入
1 2 3 4 |
;; DDSKK (global-set-key (kbd "C-x C-j") 'skk-mode) ; ▼モードでのRETを変換確定+改行ではなく変換確定とする (setq skk-egg-like-newline t) |
これで、 Emacs を起動後、 C-x C-j とすれば DDSKK が利用できます。
OS 側の日本語入力システムとは独立していますので、OS 側での変換は使わないようにしました。
◯フォントを統一する
残念ながら、日本語フォントは、 Linux , Mac ,Windows で最初から共通でインストールされているものは無いと思います。
しかし、ここでも Emacs 上は統一したかったので、
Ricty Diminished を各 OS で先にインストールしておいて、以下のように設定しました。
1 2 3 |
;; フォント設定 (set-default-font "Ricty Diminished") (add-to-list 'default-frame-alist '(font . "Ricty Diminished-15")) |
◯どうしても OS 間で異なる設定を分岐させたい
私の場合は、前述の通り、" init.el にペリっと設定を貼りつけて起動するだけ" を実現したいので極力利用しませんが、OS 毎に設定を分岐させたい場合は、
init-loader.el は非常に便利ですので使ってみてはいかがでしょうか?
最後に
機種依存無しに、 " init.el にペリっと設定を貼りつけて起動するだけ" で、 Emacs のカスタマイズが一発で完了してしまえるのは、なかなか素敵です。
TRAMP( Windows は、 Plink ) などで多段で頑張って SSH して利用していたシーンも回数が減るかもしれません(環境を接続先につくることが簡単なので)。
私の場合は、特異なキーバインドに慣れるというコストは低かったのですが、まったくの初心者だと、そのコストも高いはずです。
今となっては、 Emacs は無くてはならない存在ですが、こうやってまとめてみても、やはり導入コストは総じて高いと思います。
init.el を自分好みに鍛えて、環境に慣れてしまうと本当に使い易くなりますので、頑張ってみてくださいね。
あ、 DDSKK まで常用すると、 Control , Meta に加えて、Shift まで押しまくることになるので、左右の小指 が鍛えられて 小指マッチョ(謎) になって素敵です!