最近 Emacs
の環境に慣れ親しみすぎて、そこから外へ出られなくなってきている今日この頃、みなさまいかがお過ごしでしょうか。今日は、本当に寒いですね。雨も降ったりする予報なのに、外に出てきたオレがバカちんです。
さて、Emacs
です。何を今更と言われるかも知れませんが、紆余曲折、多くの Mac用 Text Editorの探訪に費やしたこの 8年間ですが、なんだかんだで結局 Emacs
へ戻ってきてしまいました。
学生時代のμEmacs
を使いながら、本家Emacs
への憧れが私をここへ呼びよせたのでしょう。なるべくしてなったとしかいいようがありません。というか、Emacs 以外のキーバインドがしんどいです。
#これからのインフラエンジニアには Emacs だ
viを否定するわけではないです。設定ファイルの変更には、コレからも私は viを使うでしょう。Neovimなどいう話も出てきています。好きにしてください。
ただ、SVE(Software Defined Envirionments)やSDN(Software Defined Network) など、プログラマブルな基盤の変更は増加の傾向にあり、shellのみならず、これまで以上にインフラエンジニアへのプログラミングスキルの習得が臨まれています。きっと。
そもそも chef
書けないと、これからはITエンジニアとして認めてもらえない噂も聞きます。Rubyを多少嗜んでおくことが重要な分かれ目になりそうです。
そこで Emacs
です。
なんでかは自分で探せ( ゚д゚ )クワッ!!
#インフラエンジニアへオススメする init.el 構成(その1)
さて、Emacs
のその魅力と言えば、Emacs lisp
(以下elisp)でしょう。本体自体が巨大な elisp
インタプリタとなり、多くの機能が elisp
によって提供されています。
しかしまぁ、この elisp
が他の言語とちがって取っつきにくかったり、設定が意味不明だったり、たくさんありすぎて、何をどう組み合わせて使ったりすれば良いのか、わからんちんすぎて死にたいです。
他の人の init.elを見ても、定番は分かるものの、何故それが便利なのか分からないことが多いです。というか、プログラマ向けなので、インフラ屋さんには、無駄な機能であることも多く、(゚⊿゚)イラネ( ゚д゚)、ペッとなることこの上ないことがあります。
そこで、昔取った杵柄ではありませんが、インフラエンジニアの端くれとして、役に立つと見込んだ init.el をいくつか紹介しようというのがこのコーナーです。全10回を目標にがんばります。よろしくお願いします。
##Emacsを手に入れよう
まず、何はなくともEmacs
本体を手に入れましょう。
Mac OS X用はここで配布されていますが、是非とも inline patch適用済を入手ください。自己コンパイルでも勿論構いません。あたしゃ萎えて、バイナリを入手しました。
- Windows用公式
- Mac OS X用バイナリ
- OS X 用バイナリinline patch適用済
- Linux用 (各ディストリビューションにて配布)公式
ショートカットや使い方は、勝手に学んでください。やり出すと切りが無い。ただ、Ctrl+pnbf で各々上下左右にカーソル移動できます。やったね。
##Macの人向けにオススメのカスタマイズ
Mac使ってるので、記事はMac偏重の内容となっています。仕方ない。
###inline patchの効果を発揮する
;; 日本語IM用の設定
(setq default-input-method "MacOSX")
おまじないです。入れておいてください。
###日本語の設定
これもおまじないです。
;; 日本語の設定(UTF-8)
(set-language-environment 'Japanese)
(prefer-coding-system 'utf-8)
###Marericks向け、default directory を ~/ へ変更する
Mavericksを使っていると、Ctrl+x f
や dired
したときに、/
を参照するところから始まって、いちいち ~/
へ変更するのにイライラします。次のものを入れておきましょう。
;; Mavericks用デフォルトディレクトリを"~/"にする
(setq inhibit-splash-screen t)
(defun cd-to-homedir-all-buffers ()
"Change every current directory of all buffers to the home directory."
(mapc
(lambda (buf) (set-buffer buf) (cd (expand-file-name "~"))) (buffer-list)))
(add-hook 'after-init-hook 'cd-to-homedir-all-buffers)
###commandとoptionを入れ替える
「なんのために?!」
と思われるかも知れませんが、あたしゃ Metaキー
が右手でもいじれないと困るので、Metaキー
を command
へ割り当ててます。
で、元々 Metaキー
として割り当てられていた option(alt)
を super
キーとしてます。古参にはお勧めです。たぶん。
;; CommandとOptionを入れ替える
(setq ns-command-modifier (quote meta))
(setq ns-alternate-modifier (quote super))
###'¥' を入力したら '' と入力して欲しい
そのままですね、Emacs
の場合、'¥'が役に立たないので、''となってもらうようにしましょう。
;; '¥' を入力したら '\' となるように
(define-key global-map [?¥] [?\\])
'¥'を入力したくなった場合は、"えん" で日本語変換してください(ぉ
##標準の機能をカスタマイズする
Emacs24
からは package
機能が便利に使えるようになって、新しく Package を入れやすくなりましたが、追加パッケージ系のオススメは次回以降にして、今回は build-in されている機能をenableにしたり、カスタマイズしてみます。これだけで、全然ちがいます。ステキ。
というか、今のところ、インフラエンジニア関係ない気がする。ヤバイ。
###警告音と画面のフラッシュをやめる
心穏やかな精神状態を保つためにも、warning時に発する警告音や、画面のフラッシュは止めておきましょう。ただ、警告されているかどうか分からなくなるので、素人には危険。
;; 警告音もフラッシュも全て無効
(setq ring-bell-function 'ignore)
###バッファ内の同じファイル名を区別したい
やっとそれっぽくなってきました。
どう言うことかというと、chef
で多くのファイルを更新しているときに、default.rb
というファイルを多く開くことになります。なりませんか?
私はなります。
この場合、バッファを選択しようと Ctrl+x b
なり Ctrl+x Ctrl+b
すると default.rb<2>
や default.rb<4>
など知的生命体でも理解できないような、謎の割当数値で判別しなければならなくなります。
こんなやっかいなものを default.rb<zabbix>
default.rb<mysql>
など、その属するディレクトリ名で判別できるようにしてくれる、神様のような機能がコレです。
教えてくださった組長マジ感謝です。
;; バッファの同一ファイル名を区別する
(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
###現在のカーソル行を目立たせる
地味に必須の機能です。昨今の大画面では、カーソルがいとも簡単に行方不明になります。まず、カーソル探すところから始まる程度です。
そのために、これを入れておくと、心を穏やかにする効果があります。ぜひやっておきましょう。
ただ、一部の mini bufferではおかしくなるとき有りますけど、気にしないでね。
;;; 現在行を目立たせる
(global-hl-line-mode)
###emacsのwindow幅に合わせて、分割数を変える
恐ろしく便利だったので丸パクリです。
Emacs画面のサイズに合わせて、ウィンドウを縦に勝手に分割してくれて、かつ、Ctrl+x o
と 2段階ストロークの必要だったバッファ間移動を Ctrl+t
のみで纏めてくれるという嬉しさ2倍の機能です。
詳しくはこちらをどうぞ。
emacsのwindow幅に合わせて、分割数を変える
Emacs を起動してフルスクリーンにしたら、おもむろに Ctrl+t
してから作業開始してください。その便利さに涙することでしょう。
;; Window 分割を画面サイズに従って計算する
(defun split-window-vertically-n (num_wins)
(interactive "p")
(if (= num_wins 2)
(split-window-vertically)
(progn
(split-window-vertically
(- (window-height) (/ (window-height) num_wins)))
(split-window-vertically-n (- num_wins 1)))))
(defun split-window-horizontally-n (num_wins)
(interactive "p")
(if (= num_wins 2)
(split-window-horizontally)
(progn
(split-window-horizontally
(- (window-width) (/ (window-width) num_wins)))
(split-window-horizontally-n (- num_wins 1)))))
;; Window 分割・移動を C-t で
(defun other-window-or-split ()
(interactive)
(when (one-window-p)
(if (>= (window-body-width) 270)
(split-window-horizontally-n 3)
(split-window-horizontally)))
(other-window 1))
(global-set-key (kbd "C-t") 'other-window-or-split)
###バックアップファイルを作らない
インフラエンジニア向け最重要事項です。
Emacs
では、default で *~
とファイル名の最後に散るだのついたバックアップファイルを作りやがります。これが鬱陶しい。
バックアップや履歴管理は、今後、インフラエンジニアでもgit
やsvn
でするべきなので、金輪際、こんなバックアップファイルは不要です。そうは言ってもちょっと昔に戻したいって時については、次回以降でお話しします。
;; バックアップファイルを作らないようにする
(setq make-backup-files nil)
;;; 終了時にオートセーブファイルを消す
(setq delete-auto-save-files t)
ついでに、変なオートセーブファイルが残っているものも、終了時に消してもらうようにお願いしました。
#まとめ
今回はMacの人向けにやっておいた方が良い設定と、build-inパッケージでオススメの設定をご紹介しました。
全然、インフラエンジニアと関係なさそうなところが、今後も期待ですね!
かしこ('A`)