LoginSignup
35
34

More than 5 years have passed since last update.

Sublime Text2にフォーマッタを導入する

Posted at

フォーマッタとは

この画像を見てどう思いますか?

"env04"

コードをバージョン管理するにあたって、行末に謎のスペースを含めると蕁麻疹が出るだとか、無駄な改行があると発狂しそうだとか、そういったある種のフェチを持った人におすすめの機能です。
フォーマッタを使えばそんなものは勝手に削除してくれますし、何より綺麗なコードを維持できるのです。

それだけでなく、複数人で開発する場合はコーディングスタイルの差異も吸収してくれるので大きな助けになってくれるでしょう。

SublimeAStyleFormatterをインストールする

SublimeAStyleFormatterというプラグインがあるのでインストールします。このフォーマッタはとりあえずC/C++/C#/Javaに対応しています。

まず、Cmd+Shift+PでCommand Palleteを出し、Package Control: Install Packageを選択します。(Package Controlが無い場合はこちらを参照)
"SublimeAStyleFormatter"とタイプして、選択すると自動的にインストールされます。

インストールが完了するとCmd+Alt+Fでフォーマットが効くはずなのですが、僕の場合はうまくいかず一度Sublime Text2を再起動しました。

実行前

"env02"

実行後

"env03"

保存時に自動的にフォーマッタをかける

朦朧とした意識の中コードを書くこともあるし、未来のアホな自分がフォーマッタのことをすっかり忘れるかもしれません。
そんなときの為、保存時に自動的にフォーマッタがかかるようにしておきます。

プラグインを追加する

保存時の処理をフックするためにプラグインを作りました。
メニューからTools->New Plugin…をクリックしてプラグインファイルを新規作成し、以下のコードをコピペして"AutoRunner.py"という名前で保存します。
保存先はデフォルトで開くUserフォルダを指定します。

AutoRunner.py
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をクリックして設定ファイルを開きます。
以下のように設定ファイルを編集して保存します。

Preferences.sublime-setting
{
    …

    "auto_runner":
    [
        {
            "command": "astyleformat",
            "syntaxes":
            [
                "UnityC#",
                "C#"
            ]
        }
    ]
}

"UnityC#","C#"の欄については、コマンドを実行させたい任意のシンタックスモードを指定してください。複数のコマンドの設定や"args" : […]を追加することでコマンドの引数も指定できます。

これで保存時に自動的にファイルが整形されるはずです。

35
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
34