vim-easy-align に乗り換えることにしたので。

んあぁー...何てこと.

先日買った音源達のひとつに,だいぶ前に観た kexp のスタジオライブ以来,ずーっっっと気になっていた『s』ってバンド,つかソロなんだけどね,の『Cool Choices』があるのだが,これをデータダウンロードで購入したことに酷く酷く酷く後悔している.

購入目的に探している時は, mp3 データしかないらしいとで嫌だな思いながらも「まあちっぽけなインディだし,時代も時代だから,そんなこともあるか」と仕方なく itunes から買ったんだが...*1

ある日ある記事に目を通していたら「あれ?」

cd であるじゃあああん! しかも検索してみたら,あの時と違ってかなりアッサリ見つかったぞ?*2

何故だ! ...つかアレだろ*3

結構な思い入れあって購入を決めたアルバムだけにインパクトでかい.
買い直すか? とこのところ数日自問自答している.

Cool Choices / S

と言うこって.
近頃,こればかり聴いている.

あとは『うみのて』くらいかな.そういえば最近近所でライブあったんですよね,うみのて.行きたかった.直近ですと 06/30 に unit でワンマンなのですが,その日はミーハー丸出しで既に american football...

これ以上引っ張ると,レビューとかに走ってしまいそうなので,ここで止める*4

あ,そう言えば Pavement も何かまた小銭稼ぎを企んでいるみたいですよい.
つか既に "vol.1" とか打っていてツッコミたくなるし,しかも vinyl のみ(笑*5.内容はレアトラックのかき揚げと言った御様子.

あれから 5 年か...

もとい

で今回採り上げたいのは,またもや vim なのですが,それは vim-easy-align

テキストの整形で使うプラグインは長い間 Align を使ってきたのですが,このところ vim-easy-align に乗り換える事にしました.

でも,長らく使っていた Align で浸みついた習慣はそう簡単に抜けるものでもなく,色々とぎこちない.ちょっとしたリハビリ状態.
なので,またもや自己中な処方箋を用意しておこうかと.

そんなお話です.

先日 markdwon を扱っていて,表スタイルを整形しようと :Align | したら思った通りに揃ってくれない事がありまして.
何度かのリトライも報われることなく,これキッカケに「他はどうなんだろう..」と調べているうちに vim-easy-align を知る.

vim-easy-align - とりあえずレベル

README.md の Usage を斜め読み*6した感じで,とりあえず現移行段階,作業をするのに必要な最低限なものを身に付けておこう,という内容です.

ちなみに,この中の人はガシコガシコとコードを書くようなデキる系の人種ではございません.
vim はテキストを書くメインエディタとして使うのが主で,時々チョロっとスクリプト触る,なレベルです.

そんな視点で捉えたものです.

vimrc (設定)

これは素直に readme に倣うで良しとしています.
任意の場所で良いので下記記述を追加.;

" ヴィジュアルモードで選択し,easy-align 呼んで整形.(e.g. vip<Enter>)
vmap <Enter> <Plug>(EasyAlign)

" easy-align を呼んだ上で,移動したりテキストオブジェクトを指定して整形.(e.g. gaip)
nmap ga <Plug>(EasyAlign)

想像するに,上の操作しかしないように思う.
後々,後者の設定は削除するかも.

基本的な考え方 (@自分の中で)

基本的な流れは,こんな感じかと.;

1) 整形の対象を決め → 2) easy-align を呼び → 3) 適用カラム(数値)を指定し → 4) デリミタ(文字列)を指定

自分の場合は "ヴィジュアルモードで選択し,一度に全カラム対象で整形する." と言う使い方が殆どなので,;

  1. ヴィジュアルモード入って選択し,<Enter>
    → EasyAlign 起動.
  2. * 叩き,続いてデリミタとなる文字列 (ex. |) を叩く.
    → 整形される.

まずこれが基本となるかと.
手続き 2 でのアスタリスク * は,適用カラム位置の指定で,これは "すべての列を対象に",と言う事.

ちなみに,個人的な感覚の問題なのかもしれませんが*7,"カラムの指定は必須" と言うのは,初め少々戸惑うところ.

ここを指定しないと整形処理は 1 列目のみに適用される.デフォルトは '1' なので.

一応具体的に.
markdown のカラムを 3 つ以上で構成するテーブルスタイルを整形しようと,こんなのがあった場合,;

key|value|note
--|--|--
key1|value1|note1
key22|value22|note22
key333|value333|note333

対象のテキストをヴィジュアルモードで選択し,<Enter> で easy-align を呼び,直ぐに | 叩くと,1 列目にのみに対して処理を行います.
適用対象のカラムを指定していないから.;

<!-- `<Enter>|` だと -->
key    | value|note
--     | --|--
key1   | value1|note1
key22  | value22|note22
key333 | value333|note333

して欲しいのは,全てのカラムに対してなので,デリミタ叩く前に,適用カラム位置として "全て" つまり * を挿し込んでやる.
すると,;

<!-- `<Enter>*|` だと -->
key    | value    | note
--     | --       | --
key1   | value1   | note1
key22  | value22  | note22
key333 | value333 | note333

その他

<Enter> を打つ回数で alignment "標準(左寄せ)/右寄せ/中央" を制御.

ここでも先述同様に markdown のテーブルスタイルを例に.
<bar>| で脳内変換を.

キー 回数 揃え
<Enter>*<bar> 1 標準(左寄せ)
<Enter><Enter>*<bar> 2 右寄せ
<Enter><Enter><Enter>*<bar> 3 中央

とりあえず,今はあまり使わないかな.

**アスタリスク 2 つ打つと 左/右寄せ を交互に

前の例を使うと.;

<!-- `<Enter>**|` だと -->

key    |    value | note
--     |       -- | --
key1   |   value1 | note1
key22  |  value22 | note22
key333 | value333 | note333

と,こんな感じ.

これどんなシーンで必要になるのでしょう...正直,意味不.

これはもっと使うことないかな.

正規表現つかえる - <Plug> マッピングで使う場合は

適用カラムの後に <c-/> または <c-x> 叩いてから定義する.
継続してオレオレな例で書いておきますと,;

<Enter> * <c-x>{REGEXP}

{REGEXP} はお好きな正規表現を書く部分です.
今の自分には,このケースでは正規表現を書こうとあわわしそうw

とりあえず今のところ必要ないかなとは思っていますが,
readme の例のように,"数値が出てきたところで揃える",と言うシーンは今後もしかしたらあるかも,とは思ってみたり.

正規表現つかえる - コマンドライン:EasyAlign だったら

適用カラム指定の後に // で囲んで定義する.
具体的な例えを書いておきますと,こうなりますかと.;

:EasyAlign * /{REGEXP}/

こちらも {REGEXP} はお好きな正規表現を書く部分.

これ以上マニアックなのは良いかな,と.

よくわからなかったこと

たとえば三点リーダ的に,ドット x2 .. や x3 ... をデリミタとして使いたいケースがあるのですが...

easy-align では,"定義済みデリミタ predefined alignment rules の key" として,幾つかのキャラクタが設けられていようで.

そのひとつに当然,ドット(ピリオド?) . があったりします.

これは個人的な話でもあるのでしょうが,良くこんな書き方を好んでします.;

* column1A..column1B
* column22A..column22B
* column333A..column333B
* column4444A..column4444B

これを .. で整形したいのだけど,と言う場面で戸惑ってしまったのです.

期待している結果は,こう.;

* column1A    .. column1B
* column22A   .. column22B
* column333A  .. column333B
* column4444A .. column4444B

これまでの Align でしたら,例えば :Align \.\. 等でイケていたのですが,easy-align は異なる模様.

easy-align にて実現するに直感的に思ったのは,
<Plug> マッピングストロークで使うと,. 一回打ったら整列処理が実行されるので「コマンドライン:EasyAlign\.\. とか?」と.
ところが結果は想像していた,と言いますか期待していたものとは違う様子.

到達した結論は,正規表現を使う,しかない?のかなと.
具体的なキーストロークで表しますと,<Enter><c-x>\.{2} とか :EasyAling /\.\{2}/ とか.

ちなみに,デリミタの前後は半角スペースが必要だったら,予め入れておけば,と,;

* column1A .. column1B
* column22A .. column22B
* column333A .. column333B
* column4444A .. column4444B

ここで <Enter>. とか :EasyAlign. で,と思ったのですが,やはり違う.

* column1A   .. column1B
* column22A  .. column22B
* column333A .. column333B
* column4444A.. column4444B

最終行が.

まぁ,こういう仕様なのでしょう.
とりあえず,個人的にはココまで分かれば良し,と.

:EasyAlign ですら長いので,いつもの :Align にしたいのですが

こんな感じにしたのですが.;

command! -nargs=* -range Align <line1>,<line2>call easy_align#align('<bang>' == '!', 0, '', <q-args>)

素人的には,command! Align EasyAlign なノリでさらっとイケルと思っていたのですが,そうでもないようなのですね.

つか単に知らないだけ? やっぱ?
どなたか賢い方いらっしゃったら,遠慮なく突っ込んでください.

ということで,おしまいです.

あ,せっかくですので ;

いい*8.えぇ,こういうダウナーというかフラットなのが好きです*9

結構書きましたね...

最後に,easy-align の挙動を確認するのには,readme 見つつこちらのサンプルをコピペやクローンなりして,実際にパチパチ試してみるのが一番話早いです.あは*10

*1:個人的には,ジャケットのアートワークとかも,表は勿論,裏も中身も楽しみにしている質なので,音源の購入は原則 vinyl/cd の方だったりする.

*2:vnyl は無かったようだけど.

*3:あん時,おまえで酔っぱらってノリノリだったろ....それな.検索方法とか問う以前の話だ.orz

*4:一応,ここでは基本音楽に関して突っ込んだ話は採り上げないように決めている

*5:mp3 でのダウンロードクーポンも付いてくるけどね.

*6:これがダメだ,つーのになっ.

*7:と言うか 'Align' での慣れから,と言ってしまってもいいのかな?

*8:でしょ?w ちょと歌詞メンヘラ入ってますけどw とにかくギターとドラムのアレンジが壺.このライブのサイド,いやメイン? ギター,コーラス部分であのフレーズピック弾きしながらバックコーラス歌い切るのすごいなぁ,と.さらには同じくコーラス部のシンバルの「ん,ジャーン」な感じの置き方も懐かしくて壺.あぁこんなバンドで叩きたい..曲の次点は期待裏切っての 'Muffin'.

*9:「いえぇー...!」とか,ひゅーひゅー吹くのが"べき"前提で,ライブはイケイケ,一緒に席を立ち,一緒に手を差し伸べ,一緒にooしなくちゃならない,な強迫的観念な,勿論各自はそう思っていませんでしょうが,そこで調和するマスゲームを良しとし悦びとする方々が集うような空間で揚々と腹式呼吸するような音楽のジャンルはかなり結構に超絶ちょっと最も少し苦手だったりするような,ダメ側の人種であるので....と言うか,演者ではなく,一緒に場を供させていただいている,お客さま方々にヒいてしまうような弱虫なので...あれ?w

*10:今更