cockscomblog?

cockscomb on hatena blog

Sublime Text 3 について所感

楽だからと Sublime Text を使い始めて1年弱ですが、数日前いきなり Sublime Text 3 Beta が発表されて驚きました。

f:id:cockscomb:20130131212240p:plain

Sublime Text 2 はリリースまでの間は勢いよく開発されていて、週に何度もアップデートするような感じだったものが、リリースされてから急に大人しくなって、アップデートがないまま数ヶ月という感じでした。これはつらいと思っていたら、開発者によると大きな機能を作っているということで、まあふつうに使えるしよいか、というくらいのテンションで使い続けていました。そこにいきなりメジャーバージョンアップときて、何が変わるのか、という感じです。

主な変更点

いろいろ変わったけどおもしろいところを列挙すると以下のような感じかと思います。

  • View のレイアウトに Group という概念が追加
  • Goto Symbol in Project (Command + Shift + R)
  • Goto Definition (Option + Command + ↓)
  • 全体の高速化
  • プラグイン API の改善
    • Python 3.3
    • プラグインプロセスを分離
    • 各 API の非同期化

このうち特に Goto Synbol in Project などは、Ctags のようにプロジェクト全体にわたってシンボルをインデックスすることで、シンボル検索がプロジェクト全体で行えるようになり、付随して関数の定義などにジャンプできるようになりました。これまでもプラグインがありましたが、標準でできるし、早いし、とても便利。

またプラグイン API は、実装レベルではプラグインプロセスが分離され、boost.python から Python C API を使うようになり、大きく変わったことが伺えます。これによってプラグインによってエディタそのものが落ちるということがなくなり、またプラグインが非同期に実行されるようにもなることでパフォーマンス向上に貢献すると考えられます。またプラグイン実行に使われる Python のバージョンが 2.6 から 3.3 になりました。

プラグインのポーティング

プラグイン API の変更で、プラグイン開発者は必要に応じて対応することになります。ポーティングガイドが公開されているので、これを参考にしつつ、同時に Python 3.3 系への移行を行うことになります。

実際に自作プラグインの一つ SublimePerldoc のポートを試すと、sublime.Viewbegin_edit(), end_edit() が制限されたのと、Python 3 系で commands モジュールがなくなったのが効いて少し苦労しましたが、大したことをしていなかったので view.run_command('append', {'characters': text}) にしたり subprocess モジュールにしたりで解決しました。しかし反対に Sublime Text 2 との互換性が失われてしまったので、もう少しなんとかしないといけなさそうです。

ところで Sublime Text に欠かせないのは Sublime Package Control です。こちらは早くも Python 3 に対応したバージョンが公開されています。Installation ページの下の方の手順で git でインストールするとよさそう。

ということで、Sublime Text 3 もとてもよさそうです。プラグインもだんだんと対応してくるでしょうし、今後も楽しみですね。