読者です 読者をやめる 読者になる 読者になる

vim-easy-align の設定、忘れて怖くなったので

vimrc の整理中、easy-align の設定が目にした時、まったく思い出せない現実に打ちひしがれたので。
メモ。

この部分。

let g:easy_align_delimiters = {                                              " -- 1
\ '.': { 'pattern': '\.\{2,}' },                                             " -- 2
\ '"': { 'pattern': '"', 'filter': 'v/^\s*"/', 'ignore_groups': ['String']}, " -- 3
\ "'": { 'pattern': "'", 'filter': "v/^\s*'/", 'ignore_groups': ['String']}, " -- 4
\ "-": { 'pattern': '-\{2,}'},                                               " -- 5
\ }
  1. g:easy_align_delimiters で、デフォルトにはない独自のルールを定義。
  2. ドット . を定義。
    三点リーダ的な使い方 ... をするので、それを想定して。
  3. ダブルクォート " を定義。
    → 主に vim(rc) でのインラインコメントを想定して。
    • filter では、行全体コメントの行は処理の対象外となるよう*1定義。
      この filter を設定しなかった場合、どうなるかについては後で触れておきたいと思います。
    • ignore_groups では、処理対象外とする構文グループを定義。ここでは 文字列定数 String を。
      この ignore_groups についても、設定しなかった場合について後述。
  4. シングルクォート ' を定義。
    " があるんだったら ' も、というノリだと思うw
  5. ハイフン - を定義。
    → これもしばしば --- 等リーダ的な使い方をするので、そのようなケースを想定して。

こういうのがあったとします

  let g:vimfiler_tree_leaf_icon  = " "    " default: '|'
  let g:vimfiler_tree_opened_icon  = "▾" " default: '-'
  let g:vimfiler_tree_closed_icon = "+" " default: '+'
  let g:vimfiler_tree_closed_icon= "▸"
  let g:vimfiler_readonly_file_icon = "!" " deafult: 'X'
" let g:vimfiler_file_icon        = "-"    " default: '-' why?
  let g:vimfiler_marked_file_icon   = "*" " default: '*'

行末のインラインコメントで揃えられるようにしたい、とします。

ignore_groups オプションがないと...

結果はこのようになります。

  let g:vimfiler_tree_leaf_icon  =    " "    " default: '|'
  let g:vimfiler_tree_opened_icon  =  " ▾" " default: '-'
  let g:vimfiler_tree_closed_icon =   " +" " default: '+'
  let g:vimfiler_tree_closed_icon=    " ▸"
  let g:vimfiler_readonly_file_icon = " !" " deafult: 'X'
" let g:vimfiler_file_icon        = "-"    " default: '-' why?
  let g:vimfiler_marked_file_icon   = " *" " default: '*'

インラインコメントの " ではなく、設定値の " で揃えてしまいます。
残念ですね。

ちなみにここでは filter オプションは設定しているので、行頭に "" がある行全体コメントの行はそのままです。
では今度は逆に...

filter オプションがないと...

結果このようになります。

  let g:vimfiler_tree_leaf_icon  = " "    " default: '|'
  let g:vimfiler_tree_opened_icon  = "▾"  " default: '-'
  let g:vimfiler_tree_closed_icon = "+"   " default: '+'
  let g:vimfiler_tree_closed_icon= "▸"
  let g:vimfiler_readonly_file_icon = "!" " deafult: 'X'
                                          " let g:vimfiler_file_icon        = "-"    " default: '-' why?
  let g:vimfiler_marked_file_icon   = "*" " default: '*'

ignore_groups で "String" グループは無視され、前のような設定値を囲む " で揃う事は無く、インラインコメントの " で揃うようになるのですが、
行頭の " が揃ってきてしまいます。

なおオプションは、ここで取り上げた filterignore_groups 以外にも色々あります。

参照先

  • ユーザ任意のデリミタの設定 g:easy_align_delimiters について ;
    » :h g:easy_align_delimiters
    » :h easy-align-extending-alignment-rules
  • オプション ignore_groups
    » :h easy-align-ignoring-delimiters-in-comments-or-strings
  • オプション全般
    » :h easy-align-list-of-options
  • インラインコメントの話
    » Aligning in-line comments

ぼんやりしてんじゃないよ、じぶん。
と言う事で、おしまい。

*1:v[global] により、ダブルクォーテーションではじまる行としてマッチしない行を対象にしている。