sublimeプロジェクトの管理しよう


sublime Adventカレンダーの5日目です(2記事目;ω;`)。

# はじめに
皆さんsublime使ってますか！使っていることだと思います。
ではsublimeのプロジェクトを使っていますか?
使わなくても特に不便ないので使っていない人も多いと思います。
しかしsublimeのプロジェクトは便利なのでぜひ使いましょう!

# sublimeのプロジェクト
sublimeのプロジェクトはIDEのようなワークスペースではなくディレクトリの管理をします。
なのでどちらかと言えばブックマークのような使い方になると思います。
では早速使っていきましょう。
普段使っているsublimeの画面ではサイドバーにディレクトリが乗っていると思います。
これらのディレクトリをプロジェクトとして管理するには図のようにメニューバーの`project`から`Save Project As`として適当な所に保存します。

![Project.png](https://qiita-image-store.s3.amazonaws.com/0/34727/128b9be3-396a-ffc7-1992-f78a6f522f51.png "Project.png")

そうすると、`***.sublime-project`と`***.sublime-workspace`というファイルが出来ると思います。

## sublime-workspace
これは履歴や開いていたファイルや画面分割のデータです。これによってプロジェクトが閉じた時と同じ状態を復元することが出来ます。自分でいじることはないと思います。

## sublime-project
これはプロジェクト管理の本体です。
最初は以下のようになっていると思います。

```***.sublime-project
{
	"folders":
	[
		{
			"path": "/path/to/project/report5"
		},
		{
			"path": "/path/to/project/report4"
		}
	]
}

```

これに追加するとそのプロジェクトだけ有効になります。便利ですね！
以下のものが設定できます。

### folders

+ path	フォルダーへのパス。必須
+ name							サイドバーでの表示名
+ file_exclude_patterns		非表示にするファイル名のパターン
+ folder_exclude_patterns		非表示にするディレクトリ名のパターン
+ file_include_patterns		表示にするファイル名のパターン
+ folder_include_patterns		表示にするディレクトリ名のパターン


### setting
Preferencesの`User settings`を上書きすることが出来る。

### build system
標準設定のビルドシステムを上書きする設定を書ける。

適当に設定したあとのsublime-projectはこのような感じになるでしょう。

```***.sublime-project
{
	"folders":
	[
		{
			"path": "/path/to/project/report5",
      "name":"test5"
		},
		{
			"path": "/path/to/project/report4",
      		"file_exclude_patterns":["*.out"],
      		"folder_exclude_patterns":["*.out.*"]
		}
	],
  "settings":
  {
      "translate_tabs_to_spaces": false,
  }
}
```

詳しくは[ドキュメント](https://www.sublimetext.com/docs/3/projects.html)を参考にして下さい。

個人的にsublimeの気に入っていることはこういった設定が全てファイルで管理されていていることです(なにと比べてとはいいませんが)。どの設定が適用されているのか分かりにくいという意見もありますが、柔軟性があり、また自分の好きなように変更できるので便利です。


## Gotoの強化
sublimeには関数宣言や変数宣言の場所に跳ぶ`Goto Definition`や`Goto Symbol Definiton`の機能がありますが、これがプロジェクトだとプロジェクト内の全てのファイルから検索することが出来るそうです。(ある程度はそのままでも出来るようですが)



# プロジェクトの管理
さてこれでsublimeのプロジェクトを作れるようになったわけですが、このまま使っていると`***.sublime-project`などのファイルが量産されてしまい、どこになにがあるのか分からなくなってしまいます。保存する時に一箇所に保存したらいいのですが、なかなかそこまで几帳面に出来ないと思います。
そこで`Project Manager`というプラグインを入れます。
Package Controlから`Project Manager`を入れて下さい。

![スクリーンショット 2015-12-05 10.10.39.png](https://qiita-image-store.s3.amazonaws.com/0/34727/eaf2902c-3679-e5a2-5165-00f6bef5b380.png "スクリーンショット 2015-12-05 10.10.39.png")


ここでAdd Projectをすると新しいプロジェクトが作られます。
また、下の方には保存したプロジェクトの一覧が表示されています。これらを選択するとそのプロジェクトが開かれます。

`project-setting`ファイルはsublimeの設定がある`Packages/User/Projects`の中に保存されます。ここでさらにフォルダ分けをしてもProjectMangaerは認識してくれるので、こまめに分かりやすいように分類するといいでしょう。


# pecoで起動
sublimeでプロジェクトを使う設定がほぼ終わりました。これでプロジェクトがだいぶ便利になったと思います。
しかし普段terminalを使っている身としては一度sublimeを開いて、projectManagerを開いて、プロジェクトを開く、というのは少しめんどうです。
なので、あの便利で素晴らしいpecoを使って起動できるようにします。
以下をzshrcに追加します。(shellscriptを普段書かないのでもっといい方法があるかもしれません...)

```
#pecoでsublime-projectを開く(project managerを使用)
function sublime-projects() {
  subl_root='/path/to/Packages/User/Projects'
  root_len=${#subl_root}+3
  # files=`(ls -l ~/Projects/sublime_projects | grep project | cut -d " " -f 10)`
  files=`find ~/path/to/Packages/User/Projects -name "*sublime-project"`
  if [[ -n "$files" ]]; then
    project=`echo $files | awk '{ name=substr($0,'${root_len}'); print substr(name,0,index(name,".sublime-project"))}'| peco`
    if [[ -n "$project" ]]; then
      subl `echo $files | grep $project`
    fi
  else
    echo "no projects"
  fi
}
alias subp='sublime-projects'
```

これでsubpというコマンドを打つとsublimeのプロジェクトの一覧がpecoで表示され起動出来るようになりました!


皆さんもこれで便利なsublimeライフを！