読者です 読者をやめる 読者になる 読者になる

EmEditorのマクロをPythonで記述する

私はかれこれ10年ほど、サクラエディタを使用していました。
サクラエディタで編集するファイルというのは主に
C/C++Perlの言語やHTML等のソースコード
あるいはプレーンテキスト等でした。


サクラエディタを使っていた理由は、
色々なフリーウェアのエディタを比較した結果
起動とファイルの読み込みが高速だったためです。
(一番速かったのはxyzzyだったのですが、設定がややこしそうだったので敬遠していました。)


ところが、前職を辞めてフリーランスになり
そして現職に至ってからというもの、
もっぱらPythonのコードを編集するようになり
そこで問題が発生しています。
(15ヶ月もの間、目をつぶってきたのですが。)


Pythonのコードは基本的にPEP8のコーディングルールに従って
可読性を高めるように書いているのですが、
プログラムの構文がインデントによって解釈され、
またインデントは半角スペースで行うとルールに記されているため、
オートインデントを行うことができません。


例えば

for i in xrange(10):
    print i

というコードがあり、カーソルが print i の行末にあったとして、
改行した場合にエディタがインデントを保つべきかアンインデントすべきかを
判断することが不能なのです。

for i in xrange(10):
    print i
    print i ** 2

と書くかもしれませんし、

for i in xrange(10):
    print i
print 'END'

と書くかもしれないわけです。


そこで、手動でアンインデントすることになります。
サクラエディタで Shift + Tab でアンインデントさせようとしても、
マクロで実装するのはややめんどくさいです。
というより、マクロのためにわざわざ1つのマイナー言語を覚えるのは
些か無駄に覚えてしまいます。
しかも、マクロ機能がいまいち貧弱です。


というわけで、マクロ機能が優秀なエディタを見つけました。
現在はそれを使っています。
EmEditorというシェアウェアです。


アンインデントを実行するためのマクロを
JavaScriptで記述して使用していますが、
カスタマイズ性が非常に高く、気に入っています。


そんな中、どうやらマクロをPythonで記述することもできるということがわかりました。


おまじない的に

#language = "Python"

という1行をスクリプトの先頭に書くだけで、
普通のPythonスクリプトをマクロとして登録できるようです。


機能拡張がちょっと楽しくなりそうです。
こういうエディタを探していたような気がします。
学生時代、Perlをガリガリ書いていた頃に
Perlでマクロを書けるエディタを自作したことをふと思い出しました。