SublimeText3を2年以上使って、生き残ったPluginを紹介します。


そろそろ自分の環境を変えるため、備忘録を兼ねてSublimeText3を2年以上使って生き残ったPluginを紹介しようと思います。
ちなみに環境は、Mac OSX & SublimeText3です。

しばらくSublimeText2と並行でしたが、いよいよSublimeText3へ対応するPluginが増えてきて、安定性もほぼ互角になりつつあるように感じています。
ですので最近、公私共々SublimeText3へ完全移行＆設定共有しました。


# オススメPluginたち

他にもコード補完系、Linter系、テーマ系も入れていますが、また余力のあるときに紹介します。

## Abacus

**特定の記号で列揃えをしてくれます。**
https://sublime.wbond.net/packages/Abacus

例えばこんなコードを

```php
$options['user_id'] = '1234';
$options['name'] = 'Ichiro Yamada';
$options['gender'] = 'male';
$options['age'] = '21';
```

こんな感じにしてくれます。

```php
$options['user_id']     = '1234';
$options['name']        = 'Ichiro Yamada';
$options['gender']      = 'male';
$options['age']         = '21';
```

どの記号で揃えるかは設定で増やせます。
このように列揃えすることで、他プログラマーへ処理のまとまりの単位を見せたり、タイプミスに気がつきます。

僕は、デフォルトそのままで使っていてイコールぐらいでしか使わないです。
ショートカットを覚えるほど利用頻度がないので、`command + shift + p`で、abacusと打って呼びます。

## BracketHighlighter

**`[], (), {}, "", '', <tag></tag>`といったカッコ類を強調してくれます。**

Pluginの説明ページに画像があるので、どんな機能なのかわかりやすいです。
https://sublime.wbond.net/packages/BracketHighlighter

僕は設定で`[], (), {}`をキツ目の強調にしました。
SublimeTextはたまに気を利かせてカッコ類を削除してくれるときがあり、これがバグの原因になったからです。

あと、BracketHighlighterは地味に`Swap Quotes`や`Swap Brackets`という便利コマンドをもっており、シングルクォートからダブルクォートへ変更でき、これも手に馴染むと病みつきです。

## Case Conversion

**キャメルケース、スネークケースの相互変換ができます**

意外とやりません？ 僕は結構使います。
https://sublime.wbond.net/packages/Case%20Conversion

変換したいワードを選択して、`command + shift + p`でcamelと打って探し、変換しています。

## DocBlockr

**JSDocの形式で関数、クラスの説明を書くことができます。**

ドキュメント化するかしないかに関わらず、JSDoc形式で関数の説明を書いておくのは、プログラマーのマナーだと思います。
https://sublime.wbond.net/packages/DocBlockr

以下のようなJSDocを、`/**`とつけてtabキーを押すだけで生成してくれます。

```php
/**
 * [testfunc description]
 * @param  User   $user   [description]
 * @param  Array  $option [description]
 * @return [type]         [description]
 */
public function testfunc(User $user, Array $option){
    ...
}
```

実はこのコメントブロック内にenterキーのショートカットがあるせいで日本語が上手く打てません。
enterのショートカットキーを無効にするテクニックで回避できますが、僕自身は適当にコピペで書いています。

そこまでしてDocBlockrを使う理由は

* ドキュメントを書くのが億劫なので必然とタイプセーフを書くようになる。
* ドキュメントを書くことで、改めて関数の役割を見直すことができる。（書く内容を迷うときは、大抵ひとつの関数に複数の機能をもたせている場合が多い。）

## [積極的にオススメ] GitGutter

**現在のコードとgitのHEADとの追加や変更の差分を、コード行数の左へ記号で表示してくれます。**

これは必ず導入して欲しいPluginのひとつです。これのおかげでどれだけ作業効率があがったかというシロモノです。
https://sublime.wbond.net/packages/GitGutter

Pluginの説明ページに画像がありますので、機能は理解しやすいと思います。

## [積極的にオススメ] Increment Selection

**複数カーソルで数字を選択すると、それをインクリメントしてくれます。**
https://sublime.wbond.net/packages/Increment%20Selection

使わない日が無いぐらいのPluginです。必ず導入して欲しいPluginのひとつ。
PHPのデバッグの手間は、SunippetとこのPluginで解消しました。

まずこんなSnippetを用意します。（これはcakephpのケースです）

```xml
<snippet>
    <content><![CDATA[
\$this->log("${1:write your comment} 1", LOG_DEBUG);
]]></content>
    <tabTrigger>debc</tabTrigger>
</snippet>
```

その後、デバッグしたいコード内で

0. 関数内の`$`を複数カーソルで選択していき、カーソルを先頭行に持っていきます。
0. そこで改行を入れ、空行へ`debc`でこのsnippetを挿入します。
0. さらにsnippetの`1`の部分を選択し、`command + shift + p`でincrement selectionする

これで手間が大幅に激減します。

## [積極的にオススメ] Origami

**通常の1,2,4画面分割以上に、自由に（例えばEmacsライクに）画面分割出来るようになります。**
https://sublime.wbond.net/packages/Origami

毎日使うぐらい必須のPluginですが、わかりやすい機能ですので詳細は割愛します。

## Pretty JSON

**Jsonのminify、Formatをやってくれます。**
https://sublime.wbond.net/packages/Pretty%20JSON

PHPだと、デバッグ時に使う`json_encode()`と相性が良すぎです。
ショートカットは覚えず、`command + shift + p`でjsonと打って呼び出しています。

## SyncedSideBar

**現在開いているファイルとサイドバーのファイルの位置が連動します**
https://sublime.wbond.net/packages/SyncedSideBar

慣れると快適です。逆に無いと違和感がでてきます。とりあえず入れておきたい。

## TodoReview

**コードに備忘録コメントでTODOなど書いた行を抽出してくれます。**
https://sublime.wbond.net/packages/TodoReview

コードの作業忘れ、一時的な変更の戻し忘れ・・・、はTODOコメントを一緒に添えておき、このPluginで防ぎましょう。
TODOと書かれた行を一覧化してくれ、そのリストから当該ファイルの該当行へジャンプすることができます。

ちなみにTODOでコメントを書くと、フレームワークのTODOコメントと混ざります。
なので僕は設定でTODOME: に反応するように設定し、「TODOME: リリース前にぜったいなおす」と表示するsnippetを作りました。

TODOMEは `Sublime Text > Preferemces > Package Settings > TodoReview > Settings - User` にて設定できます。
以下は僕の設定です、TODOME関連は以下のpatternsの部分を参照下さい。

```json
{
    "patterns": {
        "TODO": "TODO[\\s]*?:+(?P<todo>.*)$",
        "TODOME": "TODOME[\\s]*?:+(?P<todome>.*)$"
    },
    "exclude_folders": [
        "*.git*"
    ],
    "exclude_files": [
        "*.sublime-workspace",
        "*.sublime-project",
    ],
    "case_sensitive": false,
    "render_include_folder": false,
    "render_spaces": 1,
    "navigation_forward_skip" : 10,
    "navigation_backward_skip" : 10
}
```

## Trimmer

**文字通り、空白をトリムしてくれます**
https://sublime.wbond.net/packages/Trimmer

標準の機能だと保存時にトリムというのがあります。それも使用していますが、保存前にトリムしたいニーズもあったりします。
このプラグインでトリムしています。

# 最近重宝しているライブラリ
## random-sublime-text-plugin

**複数カーソルを利用してランダムテキストを作成できます**
https://github.com/kimpettersen/random-sublime-text-plugin

テストのFixtureを作るときとか、ダミーデータを作るときに役立ちます。
手動でやるFactoryGirlみたいなイメージです。
![example.gif](https://raw.githubusercontent.com/kimpettersen/random-sublime-text-plugin/master/example.gif "example")

## SublimeDataConverter
**CSV形式からYaml,Json,Ruby配列,PHP配列etc へ変換できます**
https://github.com/fitnr/SublimeDataConverter

Excelなどで作ったデータを速攻fixtureや配列の形に変換できます。
このプラグインを知ってから複数カーソルを使った変換作業が辛くなりましたｗ

Before

```csv
NAME,VALUE,FRUIT,DATE
Alice,10,Apple,"Sep. 12, 2012"
Bob,11,Blueberry,"Sep. 13, 2012"
Chris,12,Orange,"Sep. 14, 2012"
```

After（ワンコマンドでここまでイケます。もっと形式あります）

```yaml
---
-
  NAME: Alice
  VALUE: 10
  FRUIT: Apple
  DATE: Sep. 12, 2012

-
  NAME: Bob
  VALUE: 11
  FRUIT: Blueberry
  DATE: Sep. 13, 2012

-
  NAME: Chris
  VALUE: 12
  FRUIT: Orange
  DATE: Sep. 14, 2012


```

```sql
CREATE TABLE DataConverter(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(255),
    VALUE INT,
    FRUIT VARCHAR(255),
    DATE VARCHAR(255)
) CHARACTER SET utf8;
INSERT INTO DataConverter 
    (NAME,VALUE,FRUIT,DATE) 
VALUES
    ("Alice",10,"Apple","Sep. 12, 2012"),
    ("Bob",11,"Blueberry","Sep. 13, 2012"),
    ("Chris",12,"Orange","Sep. 14, 2012");
```

```json
[{"FRUIT": "Apple", "NAME": "Alice", "VALUE": "10", "DATE": "Sep. 12, 2012"}, {"FRUIT": "Blueberry", "NAME": "Bob", "VALUE": "11", "DATE": "Sep. 13, 2012"}, {"FRUIT": "Orange", "NAME": "Chris", "VALUE": "12", "DATE": "Sep. 14, 2012"}]
```

# その他Tips（一部Mac限定）

## Pluginの探しかた

定期的に[SublimeTextのPlugin情報サイト](https://sublime.wbond.net/) の Trending, New, Popular をチェックするのが一番いいプラグインが見つかる可能性が高いです。

## 複数台PCでのPluginの共有方法

メニューバーの`Sublime Text > Preference > Browse Packages...`を選択するとFinderが出てきます。
そこの`User`フォルダの中身を丸ごとgit管理してbitbucketのプライベートレポジトリとしています。
これを複数の環境でcloneして共有しています。

## Sublimeで開く（Finder）

Finder上なのでファイルをダブルクリックしてSublimeで開くには、`右クリック > 情報を見る` で情報ウィンドウを開く。
そこで`このアプリケーションで開く`で Sublime Text.app を選択。`すべてを変更`を押すことで、同一拡張子のダブルクリック時に利用するアプリケーションがSublime Textになる。

## Sublimeで開く（Command）

`subl`コマンドを導入しましょう。`subl .`でカレントフォルダを開いてくれます。
（有名すぎる話なので、あとで時間のあるときに追記します。）

## インデントをスペースに固定する方法

Sublimeの設定で、`"translate_tabs_to_spaces": true`を設定しているのに、保存時にインデントがスペースからタブへ変換されてしまっていた。
`"detect_indentation": false`もあわせて指定することで解決します。

## 開発環境がリモートサーバーの場合
※僕が書いた他の記事の宣伝です。一応プラグイン話に絡みがあるかな。。と思いつつ。

SFTPプラグインを一時期使っていましたが、ブランチの変更などに対応していないので（Sublime上の保存が同期のトリガーになっているせい）、最近はfswatch + rsync でやっています。
[fswatch&amp;amp;rsync&amp;amp;Automatorで、Macとサーバーのファイルをリアルタイム同期する。 - Qiita](http://qiita.com/MakoTano/items/e865e12ff26e2bc1519a)