Hatena::Groupemacs

Emacs/Lisp/Drill

 | 

2010-12-11

空気のようなEmacs Lisp -2010 冬-

14:48 | はてなブックマーク - 空気のようなEmacs Lisp -2010 冬- - Emacs/Lisp/Drill

Emacs Advent Calendar 2010ということで。

10日目はd:id:handlenameさんのorg-modeでTODO管理 - handlename's blogです。

今年もレベル高いですねー。今までのエントリーではd:id:podhmoさんfletの説明がわかりやすかったです。fletの扱いには苦労しています。


さて、11日目です。自分は昨年に引き続き「空気のようなEmacs Lisp」を紹介します。

ちなみに昨年の「Calendar->空前のEmacsブーム->社内でEmacsが浸透」作戦は見事に失敗に終わってしまい、相変わらずEmacserは社内ではマイノリティです。

昨年は鬼軍曹.elという「人に厳しいEmacs Lisp」の紹介だったので、今年は「真鬼軍曹.el」という「さらに厳しいEmacs Lisp」の紹介をしようと思いましたが、世間から抹殺されてしまいそうなので、やめときます。


今回は、個人的に「これ別にEmacs標準でよくね?」と思えるくらい便利なのに、意外に浸透していないっぽいEmacs Lisp(と設定)を2つ紹介します。

導入していない人はだまされたと思ってインストールしてみてください。


sequential-command.el

だんだんEmacsに慣れてくると、同時にMacを使っているときにちょっと便利になるキーバインドに心当たりありませんか?もしくはシェルでコマンドを打っているときかもしれません。心当たりありませんか?


多分Emacsに慣れすぎている人には空気のようなキーバインドです。

そう、C-a(行頭に移動)、C-e(行末に移動)の2つです。

もしかしたら、このキーバインドを使っていない人はまだEmacsビギナーかもしれません。


f:id:k1LoW:20101211143657p:image


ただ、C-aもC-eも行頭や行末に移動したあとは無意味なキーバインドになってしまいます。あまりに慣れすぎてそうは考えないとは思いますが、たしかに行頭でC-aを押しても意味がありません。


ここでC-aとC-eを「今までの機能をそのままに」拡張してみましょう。

以下の設定を.emacsに記述します。その際にsequential-command.elをロードパスに設置しておきます。

(require 'sequential-command)

(define-sequential-command seq-home
  back-to-indentation  beginning-of-line beginning-of-buffer seq-return)
(global-set-key "\C-a" 'seq-home)

(define-sequential-command seq-end
  end-of-line end-of-buffer seq-return)
(global-set-key "\C-e" 'seq-end)

これを設定するとC-aとC-eは以下のような動きをします。


f:id:k1LoW:20101211143658p:image


C-aやC-eを連続して打つことによって複数のタイプのポイント移動を実現しています。

また最終的には元の位置に戻るので、思考としては「とりあえず先頭に移動」するためにC-aを打ちます。インデントの「先頭」なのか行の「先頭」なのか文の「先頭」なのかは考える必要がなくなります。

空気のようなキーバインドがさらに拡張されました。


このsquential-command.elは、複数のコマンドをトグル形式で1つにまとめるEmacs Lispです。作者はanything.eld:id:rubikitchさんです。(d:id:rubikitchさんによるsequential-command.el紹介文はこちら)


smartchr.el

みなさん今日も元気にEmacsプログラミングしていますか?自分は今日もPHPときどきJavaScriptプログラミングです。

さきほど紹介したsequential-command.elはコマンドをまとめるEmacs Lispでしたが、smartchr.elはキーを押して入力される文字列をまとめるEmacs Lispです。

例えばPHPプログラミングをしている方は、以下の設定を.emacsに記述してみてください。smartchr.elはロードパスに設置しておきます。

(global-set-key (kbd "=") (smartchr '(" = " " == " " === ")))

これを設定すると、"="キーを押したタイミングで" = "が文字入力されます。

さらに"="を押すと" == "が文字入力されます。

さらに"="を押すと" === "が文字入力されます。

さらに"="を押すと"="が文字入力されます。

他のキーを押したタイミングで通常どおりに入力がされます。


「"="の前後にスペースをいれる」。たったそれだけでソースコードの視認性は上がります。

「"="の前後にスペースをいれる」。たったそれだけの操作が無くなるだけでプログラムを書くスピードが上がります。思考としては「(プログラムとして必要な)"="を入力する」ということだけ考えるだけでよくなります。

空気のようにスペースが入力されますよ。

このsmartchr.elは、複数の入力文字列をトグル形式で1つにまとめるEmacs Lispです。作者はd:id:IMAKADOさんです。(d:id:IMAKADOさんによるsmartchr.elの紹介文はこちら)


まとめ

今回も「空気のようなEmacs Lisp(と設定)」を2つほど紹介しました。

この2つは1つのキー操作で複数の操作をトグル形式でおこなうEmacs Lispです。d:id:kiwanamiさんの言葉を借りるならば「空気を読むコマンド」「コンテキスト依存コマンド」です。(d:id:kiwanamiさんの昨年の考察はこちら)

目立たないですが、あるとないとでは大違いな空気のようなEmacs Lispの紹介でした(たぶん)。

皆さんも是非設定してみてください。


あすはid:takano32さんです。

 |