2015年2月21日土曜日

Windows でもEmacs 魂は健在です

Emacs を使うのが楽しくなってくると、それに比例して Windows を使うのがつまらなくなってくる。

そんな気持ちを和らげてくれるのが「 keyhac 」というキー操作をカスタマイズできるソフトと Emacs 用の設定です。

作者の方、ありがとうございます。便利に使わせて頂いています。

Windows へのインストールと Emacs 用の設定は「Windows 7や8(64bit)で emacs キーバインドにする方法」を参考にしました。


keyhac を使ってみると

エディタだけではなくて、エクスプローラでファイルをコピー&ペーストするときにも M-w, C-y となって、思った以上に Emacs 化されてワクワクします。

もちろん IDE も Emacs のキーバインドになるので、IDE に元々付いている微妙な Emacs モードを使う必要はありません。

アプリケーションによっては、Emacs のキーバインドにしたくない場合もあると思います。

僕の場合は、ペイントをよく使うのですが、ペイントでは C-n は下へ移動ではなくて、標準の「新規ファイル」としておきたい。

こういう時は、設定ファイルの指定の場所に適用したくないアプリケーションの実行ファイル名を "mspaint.exe" のように書くだけでOKです。(場所は設定ファイルを見ればすぐに分かります。)


C-@ でマークする方に朗報です。

僕は、Emacs ではマークを C-@ で行っています。

上記の設定では、C-@ は英語キーボードではうまくいかないとのことでコメントアウトされています。

 ## 英語キーボードを利用する場合、LC-2 の設定(数引数の指定で利用)が LC-Atmark の設定で上書きされるのでコメント化
 #keymap_emacs["LC-Atmark"]     = reset_search(reset_counter(set_mark_command))

僕が使っているのは日本語キーボードなので、コメントアウトを外してみたのですが、うまく設定されませんでした。

以下の設定を追加すると、C-@ でマークできるようになりました。

keymap_emacs["LC-(192)"]     = reset_search(reset_counter(set_mark_command))

まとめ

keyhac を使うと Windows の操作が何でも Emacs 風になります。

人の心理とは面白いもので、たったこれだけのことで Windows を使うのが楽しくなり、仕事が楽しくなります。


リンク


2015年2月8日日曜日

Emacs "FooFooFoo" をプログラミングする

Software Design の1月号の記事で、「編集はプログラミングである 」というコラムがありました。(リンク:Vim に乗り換え!?

Vim では 「FooFooFoo」と書くには、3iFoo Esc とタイプすれば良いようです。

結果として FooFooFoo と得るために、行うのは 3iFoo Esc という入力である。「これはプログラムである」と考える。

FooFooFoo

FooFooFoo とそのままタイプするのは DRY の原則に反しており、プログラマとしては避けたい(?)

Emacs で FooFooFoo をプログラミングするにはどうするか? 次のような案はどうか?


1. "Foo M-del C-y C-y C-y"

【 説明 】

Foo とタイプしてそれを切り取って3回貼り付ける。

7ストロークのタイプになり、FooFooFooとタイプするより(9ストローク)も2ストローク少なくなる。(速いかどうかはともかく)

しかし、最後のC-y C-y C-y は同じことを3回やっていて依然としてDRY違反で、モヤモヤ感は残る。


M-3 C-y というようなイメージで貼付けを3回するようプログラミングしたい。

(M-数字 は次のコマンドや入力を数字回繰り返すコマンド)

しかし M-3 はこの場合は C-y に適用できない。


2. "C-x ( Foo C-x ) M-2 C-x e"

【 説明 】

C-x ( と C-x ) はマクロの定義。最後のC-x e がマクロの実行。

C-x ( と C-x ) の間の Foo という入力がマクロとして定義され、マクロの実行をM-2 で2回繰り返す。(定義した時に1回、Fooを入力しているのであと2回繰り返して計3つのFooが入力されたことになる。)

Fooという関数を切り出して、ループで2回実行しているようなイメージ。プログラミングをしているような感じがする。


マクロはショートカットがあるので、実はもっと簡単になる。

C-x ( は F3 キーに割り当てられていて、C-x ) はF4 キーに割り当てられている。

さらに、C-x )は繰り返しのコマンド "M-数字" が適用できて、この場合にはマクロを定義して即座に数字(-1)回分実行する。

まとめると以下の "プログラム" になる。

"F3 Foo M-3 F4" (6ストローク!!)


3. まとめ

あまり実用的ではない編集方法でした。

以下を覚えておくと、この駄文を最後まで読んだ意義があるかもしれません。

 1. M-del で後ろ向きに1単語 kill する。

 2. M-数字 コマンド でコマンドを "数字" 回繰り返す。

 3. マクロの定義、実行は意外と簡単(やってみるべき!)。定義にはショートカット(F3, F4)もある。


リンク

・Emacs manual - Keyboard Macros 17.1 Basic use

・Vim に乗り換え!?




2015年2月1日日曜日

Vim に乗り換え!?

Software Design の2015年1月号は Vim の特集でした。

Emacs を使っているので、普段は Vim の記事は読まないのですが、Vim を IDE のように使うという記事に惹かれてちょっと読み始めました。

Emacs を使っていても、もう少し IDE 的にしたいと感じていたので妙に熱心に読んでしまい、気がついたら Vim をインストールしてチュートリアルをやっていました。


もう Vim への乗り換えを決意して、チュートリアルも終わった後で、ふと1文字削除しようとして我に返りました。

1文字削除するには、「編集モードに移行して x キーを押す」なのか?

これは打ち間違えた時のコストが高すぎる!

・・・何でもコマンドですると思い込んでいて Backspace で消せることには思いが至りませんでした。

とにかく、勘違いにせよ冷静になれました。

Emacs も何でもできるので IDE 的にしたければ Emacs でやればいいだけでした。

一瞬だけの Vim 乗り換えでしたが、IDE 的に拡張したいポイントを考えるいいきっかけになりました。


***

特集のコラムで Vim の編集作業はプログラミングであると言っていました。

「3iFoo Esc」と "プログラム" すると「FooFooFoo」という結果が得られるという例が挙げられていました。

モードを切り替えて入力したり編集したりすると考えるのではなく、編集作業全体(3iFoo Esc)がプログラムで、結果としてある文字が入力されている、という考え方です。

面白い考え方と思いました。

Emacs は編集モードはありませんが、様々な編集のショートカットがあるので考え方は通ずるところがあると思います。


今、Emacs を使っていて編集機能を使いこなせているとは言いがたいので、もう少しチャレンジしてみようと思いました。

普段は読まない Vim 記事ですが、いい刺激が得られました。


Software Design (ソフトウェア デザイン) 2015年 01月号 [雑誌]