35
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?