フォーマッタとは
この画像を見てどう思いますか?
コードをバージョン管理するにあたって、行末に謎のスペースを含めると蕁麻疹が出るだとか、無駄な改行があると発狂しそうだとか、そういったある種のフェチを持った人におすすめの機能です。
フォーマッタを使えばそんなものは勝手に削除してくれますし、何より綺麗なコードを維持できるのです。
それだけでなく、複数人で開発する場合はコーディングスタイルの差異も吸収してくれるので大きな助けになってくれるでしょう。
SublimeAStyleFormatterをインストールする
SublimeAStyleFormatterというプラグインがあるのでインストールします。このフォーマッタはとりあえずC/C++/C#/Javaに対応しています。
まず、Cmd+Shift+PでCommand Palleteを出し、Package Control: Install Packageを選択します。(Package Controlが無い場合はこちらを参照)
"SublimeAStyleFormatter"とタイプして、選択すると自動的にインストールされます。
インストールが完了するとCmd+Alt+Fでフォーマットが効くはずなのですが、僕の場合はうまくいかず一度Sublime Text2を再起動しました。
実行前
実行後
保存時に自動的にフォーマッタをかける
朦朧とした意識の中コードを書くこともあるし、未来のアホな自分がフォーマッタのことをすっかり忘れるかもしれません。
そんなときの為、保存時に自動的にフォーマッタがかかるようにしておきます。
プラグインを追加する
保存時の処理をフックするためにプラグインを作りました。
メニューからTools->New Plugin…をクリックしてプラグインファイルを新規作成し、以下のコードをコピペして"AutoRunner.py"という名前で保存します。
保存先はデフォルトで開くUserフォルダを指定します。
import re
import sublime, sublime_plugin
# Plugin of running command when saving file
class AutoRunner(sublime_plugin.EventListener):
current = None
# Execute a command
def execute(self, view, info):
# Get information of command
command = info.get('command')
syntaxes = info.get('syntaxes')
args = info.get('args')
# Get name of syntax mode from file path
# /AAA/BBB/ccc.tmLanguage => ccc.tmLanguage
filename = re.split('/', self.current)[-1]
# ccc.tmLanguage => ccc
current_syntax = re.split('\.', filename)[0]
# Run command if list of executable syntax mode contains current syntax mode
if syntaxes == None or current_syntax in syntaxes:
print command
edit = view.begin_edit()
view.run_command(command, args)
view.end_edit(edit)
# Execute when before saving file automatically
def on_pre_save(self, view):
# Get current syntax mode
self.current = view.settings().get('syntax')
if self.current == None:
return
# Execute command from each settings
commands = view.settings().get('auto_runner')
if commands != None:
map(lambda c :self.execute(view, c), commands)
プラグインの作り方についてはこちらにまとめました。
このプラグインはとりあえずgistに置いてあります。
設定ファイルを書く
保存時に特定のコマンドを実行させる為、今度は設定ファイルを編集します。
メニューからSublime Text2->Preferences->Settings-Userをクリックして設定ファイルを開きます。
以下のように設定ファイルを編集して保存します。
{
…
"auto_runner":
[
{
"command": "astyleformat",
"syntaxes":
[
"UnityC#",
"C#"
]
}
]
}
"UnityC#","C#"の欄については、コマンドを実行させたい任意のシンタックスモードを指定してください。複数のコマンドの設定や"args" : […]を追加することでコマンドの引数も指定できます。
これで保存時に自動的にファイルが整形されるはずです。