舊篇「文字對齊 plugin - Alignta 使用方式」已過時,本文以 Alignta 0.3.0 為準重寫。
※變更項目參考原 doc(日文)alignta.jax#更新履歴 - 2011-09-25。


Alignta (h1mesuke/vim-alignta) 是什麼?

對齊文字用的 plugin,效果舉例如下,將多行文字依等號對齊:

  原文           :Alignta =
  ------------   ------------
  a = 1          a     = 1
  bbb = 10       bbb   = 10
  ccccc = 100    ccccc = 100

另一支比較有名的對齊 plugin 是 Dr. ChipAlign.vim,可惜用法難懂,不容易記; Alignta 或許功能沒那麼豐富 (?),但實在清楚多了,名字也比較可愛。


SYNOPSIS of Alignta command (for v. 0.3.0, UNOFFICIAL)

                           (Shifting
                            Alignment)
                              <-
                              ->           n
                              <--
                              -->

:[range]Alignta [filter]  [align method][margin]    [-p] [-erER] pattern[/{count}] [pattern2 ...]

               g/pattern   (Padding                                       nunber
               v/pattern    Alignment)                                     'g'
                               <           n:n
                               |        [0-9][0-9]
                               >          [0-9]
                               =
                           (repeat as
                             LM[R]...)
  • filter (doc#556)

    指定哪些特殊的行(通常是註解)要/不要進行對齊。

    g/pattern 只處理符合的行;v/pattern 不處理符合的行。

  • align method

    Alignta 的對齊分為 ShiftingPadding 兩種,參數也分為兩套。

    Shifting Alignment (doc#153) 比較簡單,只是將 pattern 的開頭垂直排在一起。
    以下參數表示採 Shifting 對齊: (doc#445)

    • <- 將每一行符合 pattern 的部分,對齊到其中最靠左的 column
    • -> 同上,但對齊到最靠右的 column
    • <--
    • --> 兩個 dash 的版本表示用 tab 字元排版

    Padding Alignment (doc#121) 應該比較常用,依 patten 將文字拆成多個欄位,每行再補上空白(padding)使各欄等寬。

    各欄以 {L}{M}{R} 為一個單位,{M} 就是 pattern 符合的位置,{L}{R} 是它的左右側。 寫法是以 <|>= 指定各單位靠左、靠中、靠右或保持原本方式對齊, 例如 :Alignta <|> = 會讓等號兩邊靠外對齊。 (doc#304)
    註:{R} 可省略,表示跟 {L} 相同,例如 <=<=< 同義。
    註:若後面有指定多個 pattern,這裡可以重覆 {L}{M}{R} 來指定多個對齊方式。

  • margin (doc#304)

    指定各欄位的間隔。

    Padding 對齊時,間隔是指 {L}、{R} 和 {M} 之間的空白數; 寫法是 {L-margin}:{R-margin},例如 :Alignta <<3:1 =
    可簡寫為 {L-margin}{R-margin} 或 {LR-margin},但 margin 必須是個位數 [0-9](10 就不行了),例如 46 即 4:6,4 即 4:4。

    Shifting 對齊時,間隔是指 pattern 左側至少要留的空白數。 單純寫個數字即可。

  • -e -r -E -R (doc#227)

    明確指定後面 pattern 的解析方式。

    • -e 視為純文字
    • -r 視為 regexp pattern
    • -E 之後的 pattern 一律視為純文字
    • -r 之後的 pattern 一律視為 regexp pattern

    例如 :Alignta -e \d 是以 \d 對齊,而非以數字(\d)對齊。

  • -p (doc#592 )

    若後面的 pattern 是特殊字,加上 -p 可確保它被視為 pattern。 例如 :Alignta -p << 中的 << 是指 pattern,而非對齊方式。

  • pattern[/{count}]

    指定要用什麼來對齊。(doc#188)

    若 pattern 包含 \.,就會被視為 regexp 解析,否則一律以純文字處理。

    pattern 後面可以加 /{count},指定可符合幾次,超過 count 就不再對齊(doc#254), 例如 :Alignta ={2} 只會處理前兩個等號,之後的就保持原狀。
    另 count 使用 /g 表示有 pattern 符合時才對齊,否則不理它。

    註:count 預設值在 Shifting 對齊時是 /1,Padding 對齊時是 /g
    註:Alignta 的參數若不符合其他任何 option 寫法,就會被視為 pattern。
    註:若有設定 alignta_default_arguments 變數,則此參數也能省略。

  • pattern2 ...

    支援複數的 pattern,直接寫在後面即可,例如 :Alignta = /* */。 (doc#287)


可設定的變數 (doc#618)

  • g:alignta_default_options
    :Alignta 的預設對齊選項。 參數中未指定對齊選項時,就會以此為準,預設為 "<<<1:1"
  • g:alignta_default_arguments
    直接下 :Alignta 不帶參數時,會使用的預設參數。 無預設值。

以上變數也可使用 b: 前綴設定 buffer local 版,例如 b:alignta_default_arguments


Unite.vim 介面 (doc#654)

如果配合 Shougo/unite.vim 一起使用,可以做到:

  • 先把常用的對齊方式定義好,以後選取文字 → 呼叫 :Unite alignta:arguments,就能在 unite 介面中直接選擇對齊方式,不必再想指令了。
  • 直接呼叫 :Unite alignta:options,就可以在 unite 介面中調整 :Alignta 的預設選項(可事前定義),也有提供方便的 <RESET> 選項。