Evil: EmacsをVimのごとく使う - 導入編

You underestimate the power of the dark side.

Star Wars: Episode VI - Return of the Jedi

EmacsLispで自由自在に拡張でき, エディタの枠におさまらず, コンピュータ上でのあらゆる創造的活動のための環境として発達してきました. しかし, 少なくともファイルを閲覧し編集するという操作に関しては, vi/Vimが非常に優れたインタフェースであることもまた事実です. 両者はそれぞれが根強いファンを抱え, 長らく宗教戦争を繰り返してきました.

この対立が止揚された結果として生まれたのがEvilです. Emacsのなんでもありな環境の上でVimをエミュレートすることで, EmacsでありながらVimの操作性を実現したのです.

本稿では, Evilとは何かということに始まり, 具体的な導入方法について解説します.

続きを読む

ノートPCでLinuxの仮想化

いままではノートPCではWindowsを使ってきた. なんだかんだで使い慣れて*1いたり, あるいはハードウェア機能をフルに活かすためには他に選択肢が無かったりした. でも最近はペンタブ搭載機でもLinuxがふつうに動いたりするし, Windowsを使っていてもどうせ仮想OSとしてLinuxを動かしていて, Windows上のLinuxをべんりに使うためのバッドノウハウが溜まってしまいつつあったので, 思い切ってWindowsを使うのをやめることにした*2.

ノートPCでカジュアルにLinuxを使うなら, できるだけ新しいソフトウェアが動いてほしい. Debianならunstableを入れたい. でもなんかアップデートして急に動かなくなったりしたら困る. そこで仮想化ですよ! ただ, ノートPCの仮想化にはいろいろ問題点もあるので, 整理して解決策をまとめておく.

*1:昔々Windowsアプリを作ったりしていたのでWin32 APIなんかはだいたいわかっていて, APIから見たOSのアーキテクチャに馴染みがある

*2:と言っても普段使いのノートPCでWindowsを使うのをやめただけでWindows機を完全になくしたわけではない

続きを読む

ペンタブノートPCでLinuxを使う

ThinkPad X201 TabletThinkPad X220 TabletLinux (Debian sid)をインストールして, なかなか快適に使えるようになってきたので備忘を兼ねて設定方法を書いておく.

続きを読む

Emacs上のターミナルを最強に: term+.el

第6回関西Emacs勉強会で, Emacs上で最強のターミナル(端末)環境を実現する話をしてきました. 以下がそのとき用いたスライドです.

このスライドだけでは, とりあえず使ってみるのではなく常用したい場合にどうしたらよいかわかりにくいと思うので, その辺りを補足しながら, きちんとしたドキュメントを書くまでの暫定の使い方を書いておこうと思います.

続きを読む

Maybeに限らずJavaで直和型を実現できるか

JavaでMaybeを説明した以下の記事について, id:tozimaさんと某所*1でやりとりしていたら, 有益な話が出てきたのではないか, ということになったので, 紹介.

*1:非公開なところ.

続きを読む

LaTeXでオブジェクト指向プログラミング

LaTeXのコマンドは複数の単語のものも一続きにしないと一つのシンボルと見なしてもらえないのが不便だったので, 名前空間が使えるというか, 記号で区切った後にサブコマンドを続ける書き方をサポートするものを作っていた. そうしたらいつの間にかオブジェクト指向プログラミングフレームワークが出来上がっていた.

続きを読む

Emacsでプレフィックスキーにもコマンドを割り当てる

Emacsでは, たとえばC-c C-jにコマンドが割り当たっているとすると, C-cまで打った時点では入力待ちになる. 慣れてくるとC-c C-jは素早く打てて, C-cを押して次が何のキーだったか迷うようなことはなくなってくるので, C-cを押してしばらく(0.5秒とか)経った場合は続けて別のキーを入力するつもりはないものとして扱って, C-c単体に別のコマンドを割り当てられるようにしてもよいのではないか.

もっと深刻な話としては, たとえばESC xというキー列はM-xと同等に解釈されてしまうので, ESCそのものにコマンドを割り当てることはできない. もしもM-xはAlt+xでしか打たないというのであれば, M-xのときにはESCとxが同時に入力されるはずなので, ESCの入力があってからほんの少しでも(0.01秒とか)入力待ちになったら, それはESC単体の入力とみなしても問題はなさそうなもの. 実際, ViperVimpulse, Evilなどでは, この発想でESCとM-x等の両方に別々のコマンドを割り当てている. 今回は, これをESCだけでなく一般のキーに対してできるようにしたという話.

続きを読む

C++のテンプレートでラムダ計算と型推論

C++のテンプレートを, コンパイル時に走るプログラムを記述するための言語だと思うと, この言語はチューリング完全なので, 当然ラムダ計算のインタプリタを実装できるし, そのラムダ計算の項の型を推論することもできる. できるからと言って馬鹿みたいにやってしまったという話. ソースコードは末尾.

続きを読む