カビパン男と私

HOME/横書き縦書き

Atom とシェル原人

どうも Atom というものに手が出なかった。エディタといえば、vi (私が最初に使ったエディタは、生粋の vi であって vim ではなかった) か Emacs という原始人だから仕方がない。なにしろ Atom を立ちあげると、黒々としたテーマの画面が出てくるわけで、あれだけで恐しげに感じたのである。

しかしまあ、テーマはテーマに過ぎない。思い直して最近 Atom をい使ってる。もちろん、テーマは白っぽいやつにしたけどね。SKK は、まあ fcitx から使うから、何とかなるわけです。もちろん、キーバインディングは Emacs 風にしないといけないので、 atomic-emacs というパッケージを入れて、Ctrl-h のために、~/.atom にあった keymap.cson なるファイルに

'body':
  'ctrl-h': 'core:backspace'

とか書いておけば、まずまず役に立つわけであります。ついでにいうと、ファイルを開くのが GUI だと面倒なので、 advanced-open-file というパッケージも入れましてござる。

さて、表面的には Atom を使ってるように見えるところまできたわけだけれども、使ってみると、面白いことを見つけた。編集中のファイルに他のプログラムで変更を加えると、リアルタイムでその変更が反映されるのである。ちょっとびっくりした。

たとえば、 test.txt というファイルを Atom で開いているときに、 echo "aaa" >> test.txt なんてやると、ちゃんと Atom のバッファに aaa が加わるのだ。

もっとも、これはいつでもそうなるというわけではない。事情は、ほんの少し込み入ってる。

Atom はユーザーがバッファに変更を加えるまでは、スクリーンエディタというよりリアルタイム・ファイル・ビューアのように働く。つまり、シェル・スクリプトがファイルを変更したり、他のエディタがバッファをファイルに書き込んだりすると、その変更が Atom のバッファに反映される。

一方、ユーザーが Atom のバッファを変更し、ディスク上のファイルと Atom のバッファ内容に相違が生じると、他のプログラムがディスク上のファイルを変更しても、自分のバッファにそれを反映させることはない。

なお、その後、Atom でファイルをセーブし、ディスク上のファイルと Atom のバッファが一致すると、再び、他のプログラムによるディスク上ファイルの変更をバッファに反映し始めるようになる。一つつけ加えておくと、ここで大事なのは「ディスク上のファイルとバッファが一致する」というところであって「セーブする」というところではない。

Atom でバッファを編集して、ディスク上のファイル内容と相違が生じても、その後、セーブ以外の方法で(たとえば、たんに追加した文字を削除するとか)再びディスク上のファイルとバッファが一致するようになれば、バッファはディスク上のファイルの変更をj反映するようになる。

こんなところに git のセンスが窺えるような気がしたことですよ。

とまあ、そんなわけで、Atom とシェル作業の連携するうとき、この仕組みを使っていこうかなと考えた次第。

@kabipanotoko