2014
03/20

Sublime Text3を使いはじめたのでプラグインも作ってみた

stplugin

先日から開発環境の見直しを考えてまして、前回のGrunt導入に続いてエディタをSublime Text3にしてみようかと思い試してみました。

本体の多機能さと豊富なプラグインのおかげで特に手をかけなくても相当に強力な開発環境となるのですが、大人(お仕事)の事情でオリジナルのプラグインが作れないとメインエディタにはできません。

そこで実際に簡単なプラグインを作ってみました。
プラグインとして動作するものをGithubで公開していますので、よかったら参考にしてみてください。

ST3PluginSample

Sublime Text3を使用した例ですので、2では動かないコードもあります。ご注意ください。

ADs

必要なファイル

作成するプラグインの名称を「newPlugin」ということにして話を進めます。

C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\

内に「newPlugin」という名前のフォルダを作成し、更にその中に「newPlugin.py」というファイルを作成します。
このnewPlugin.pyに処理を書いていきます。

共通の設定

メニューの「ツール」→「プラグイン追加」とすると新規ドキュメントが開き、以下の内容が表示されるかと思います。
入力しているテキストを操作するタイプのプラグインは以下の記述がベースとなります。

プラグイン内の1つの機能が1つのクラスとなるため、単一ファイル内に複数のクラスを記述することも可能です。

Pythonは名前ぐらいしか知らなかったので簡単な処理でもずいぶん手間取ってしまいました…。
PHPやJavascriptの{}の代わりにインデントを使う、というふうに見れば分かりやすいかもしれません。

クラス名のルール

キャメルケース+Command

のちほどメニューやコマンドパレットから実行する際に名前が必要となります。
名前のルールとして最後は必ず「Command」で終わり、複数の単語の場合はキャメルケースにする必要があります。

具体的なnewPlugin.pyの記述

プラグイン本体であるnewPlugin.pyファイルに記述する内容をいくつか書いてみました。
いずれもテキストを操作する単純な例なので、プラグイン開発の基本的な流れが分かりやすいのではないかと思います。

例その1:選択したテキストの前後に定型文を入れる

たとえば、「おにぎり」という単語を選択してプラグインを実行すれば全部<strong></strong>で囲ってくれるという処理は以下のようになります。

具体的な処理の流れとしては

・選択範囲の取得
・前後にテキストを足して選択範囲を置き換える

となります。

self.view.sel() ・・・ 選択範囲

この例そのままだと「Emmetでええやん…」という程度のものですが、選択範囲のテキストによって条件分岐したりテキストの内容を元にstart/endを定義したりするなど、応用すればいろいろと使えます。

例その2:カーソル位置にテキストを挿入する

たとえば、カーソル位置に<br />を入れる処理は以下のようになります。

定型文の挿入などに使えそうです。

例その3:コンソールに文字入力を行い、その内容を元にテキストを生成して挿入する

上記の例では固定文言を挿入したり差替えたりというものでしたが、プロンプトみたいなものを出してその入力内容を反映して処理を行いたい、という場合もあると思います。

たとえば、画像サイズを入力すればそのサイズを適用したimgを生成する、といった処理は以下のようになります。

文字入力を行う場合はこれまでの処理と異なり、以下の2つのクラスが必要となります。

・コンソールを表示させ、文字入力後の処理へ引き継ぐクラス
・実際に処理を行うクラス

コマンドパレットから呼び出せるようにする

これで3つの処理を含んだプラグインが出来上がったわけですが、このままでは実行することが出来ません。
※コンソールからなら実行できますが。

そこでコマンドパレット(ctrl+shift+p で出てくるやつ)の一覧に表示されるようにします。

Default.sublime-commandsの作成

newPluginフォルダ内に「Default.sublime-commands」というファイルを作成し、以下のように記述します。

caption・・・コマンドパレットで表示される名称
command・・・キャメルケースで定義したクラス名を小文字+アンダースコアで繋ぐかたちに変える

Default.sublime-commandsというファイルがプラグインフォルダ内にあれば、コマンドパレットの一覧に表示されます。
そこで該当のプラグインを選択すれば、実際にこれまで書いた処理が実行されます。

ショートカットで呼び出せるようにする

利用頻度が高いプラグインであればあるほどショートカットで呼び出したいことも多いと思います。
その場合は「Default (Windows).sublime-keymap」というキーマップファイルを作成し、ショートカットの定義を行います。

Default.sublime-keymapの作成

Windowsの場合は「Default (Windows).sublime-keymap」というファイルを作成し、以下の内容を記述します。
ショートカットキーと.sublime-commandsファイルでも使用したコマンド名を入力します。

Windows以外の場合、ファイル名は

Default (OSX).sublime-keymap
Default (Linux).sublime-keymap

となります。
指定するキー名はSublime Textのデフォルトの設定を見るといいでしょう。

上記をまとめたもの

Githubに上げてます。

SublimeText3のPackageフォルダ内に「NewPlugin」というフォルダをつくり、その中に上記アーカイブの中の「newPlugin.py」「Default.sublime-commands」「Default (Windows).sublime-keymap」の3つのファイルをコピーすればプラグインとして動作します。

コマンドパレットより「newPlugin」という単語で探すか、Ctrl+f1/f2/f3のショートカットを試してみてください。

参考にしました

Sublime Text3もPythonも全然使ったことなかったですが、いろいろなサイトの情報のおかげで何とかなりました。
ありがとうございました。

Sublime Text 2 Plugin Tips
SublimeTextのpluginの作り方
Sublime Text 2 のプラグインを作る
Pythonでの文字列置換をマスターする

まとめ

テキストで.pyファイルや設定ファイルを書いて指定フォルダに置くだけでプラグインとして動作するというのはとても手軽です。

過去にDreamweaverとEmEditorでプラグイン(というかマクロ)を作成したことがありますが、プラグインとして認識させるためにはコンパイルが必要でした。その面倒さと比べると自宅と職場の環境の共有や移行なども簡単にできそうです。

Pythonというのが大きな壁なのですが、慣れてくれば簡潔で見通しのいい言語と思える日がくるかもしれません。

でもプラグインをJavascriptで書けたらいいのに…とは思わざるをえない…。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments