SublimeText

Sublime Textでハッシュや配列、引数を整列

More than 1 year has passed since last update.

AlignTabの概要

 カンマやコロン、パイプなどで単語を連ねる際、可読性や自身の精神ケアの為にカラムの先頭や末尾を揃えるのが常だと思います。これを力技で行おうとすると幾度と無くスペースキーを叩くこととなり、あまり楽しいとはいえない作業となります。
 そこで今回は、Sublime TextとAlignTabパッケージを使用して、ワンタッチでコードを整形できるようにしましょう。

 例えば、以下は整形されていないコードです。

昨日までのコード
honoka: :strawberry, eli: :chocolate, kotori: :cheese,
umi: :honoka, rin: :ramen, maki: :kyoko,
nozomi: :yakiniku, panayo: :rise, nico: :maki

 AlignTabを使用すれば、ショートカットを叩くだけで以下の通りに整形することが出来ます。

今日からのコード
honoka: :strawberry,    eli: :chocolate, kotori: :cheese, 
   umi: :honoka,        rin: :ramen,       maki: :kyoko,  
nozomi: :yakiniku,   panayo: :rise,        nico: :maki    

使用方法

 では使用方法を見てみましょう。
 いつもどおりpackage managerからインストールして下さい。
https://github.com/randy3k/AlignTab

 右クリックメニューなどからAlignTabパネルを開くことが出来ます。
 コマンドは以下の通りに構築します。
デリミタ/オプション

 始めに簡単な例として、以下のカンマで区切られたコードを整形してみましょう。

honoka, umi, kotori,
hanayo, rin, maki,
eri, nozomi, nico

 コマンドは以下の通りです。
,/l

 これは、以下のことを意味しています。
, ","をデリミタとして区切る。
l カラムを左詰めにする。

 カラムの整列には、l c rが使用できます。それぞれ、左詰め、中央寄せ、右詰め、を表しています。
 また、整列基準オプションの後に数字を置くことにより、デリミタの両サイドに置くスペースの数を指定できます。
,/l0l1r0r1
 このコマンドを見て下さい。
l0 初めの二文字は、一つ目のカラムとその後に続くスペースの数を指定しています。
l1 そして次の二文字はデリミタ自体の整列基準とデリミタの後に置くスペースの数を指定しています。
 デリミタ自体がカラムとして扱われることに注意して下さい。そのことを理解するために、次は正規表現を用いた整形を行ってみましょう。

honoka: :strawberry, eli: :chocolate, kotori: :cheese,
umi: :honoka, rin: :ramen, maki: :kyoko,
nozomi: :yakiniku, panayo: :rise, nico: :maki

 初めのハッシュです。これを整形するには、以下のコマンドを使用します。
\w+:|:\w+,*/c0rc0l
 順に見て行きましょう。
\w+: これは一般的な正規表現です。英数字が1個以上続いた後にコロンが置かれるもの、すなわちruby1.9以降の新しい記法でのハッシュキーに使われているシンボルを表しています。
:\w+,* これはコロンから始まり0個以上のカンマで終わるシンボルを表します。
c0rc0l コードの整形方法を指定しています。整列基準を表すアルファベットの奇数番目がカラムの整列基準となり、偶数番目がデリミタ自体の整列基準となります。たとえ全ての文字がデリミタとしてマッチしたとしてもカラムが存在するものとして扱われるので、今回のように全てをデリミタとして整列させる場合もダミーとして何らかのオプションを入れる必要があります。例の場合は中央揃えのCを指定し、その後に0を指定することで余計なスペースが入ることを防いでいます。例のrは始めににヒットしたデリミタ、つまりハッシュのキーに、lは二番目にヒットしたデリミタ、つまりはハッシュのバリューに対応しています。

 ショートカット

 AlignTabを短縮的に利用するには、2つの方法があります。

 エイリアス

package settingsより、エイリアスを設定することが出来ます。

AlignTab.sublime-settings
 {
  "named_patterns": {
     "rh": "\\w+:|:\\w+,*/c0rc0l"
  }
}

上記のように記載すれば、AlignTabパレット内でrhとタイプすれば、指定したコマンドを走らせることが出来ます。

 ショートカットキー

*.sublime-keymap
[
  // Align Tab
  {
    "keys": ["ctrl+shift+a"], "command": "align_tab",
    "args" : {"user_input" : "\\w+:|:\\w+,*/c0rc0l"}
  }
]

 Misc.

 オプションにはデリミタの個数を指定する事ができます。
/f2 とした場合、デリミタは初めの2つ目までマッチして、それ以前のもののみ整形します。
 オプションでの*は、繰り返しを意味します。以下の2つは等しいものとして扱われます。
rcccc r(c)*4