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

switch系プラグイン vim-clurinを強化した話

github.com

switch系プラグインについて

switch系プラグインとは定義されたルールに従ってテキストを置換する類のプラグインです。
よくあるルールはTrueFalseを切り替える、if -> else if -> else の順で切り替えるなどです。

vim-clurinの基本的な使い方は作者であるsynganさんの記事を参照してください。 qiita.com

switch.vimとの違い

変更内容の前に、筆者がvim-clurinを使ってる理由をざっと説明します。
筆者はvim-clurinの前はswitch.vimを使っていました。
筆者が使っていた範囲でのswitch.vimとの大きな違いは以下の2つです。

  1. ファイルタイプ毎の設定をグローバル変数1つで定義できる。
  2. パターンにマッチしたら関数を呼べる。
  3. ぱっと見設定が冗長に感じる
    • 拡張性のために冗長な書き方ができますが、ある程度簡略化して書けます。

関数を呼べるのがなかなか強力です。

改善内容

各変更のサンプルはリポジトリのREADMEを見てください。
GitHubを見る限りsynganさんは現在あまり活動されてないようなので、試す場合は筆者のリポジトリを使ってください。

1. ファイルタイプ別設定のキーに複数言語を指定できる

g:clurinのキーには'c'の用に単一のファイルタイプしか指定できませんでしたが、スペース区切りで複数の言語を指定できるようにしました。
C言語C++共用の設定であればキーは'c cpp'です。もちろん、C言語C++独自の設定と共存できます。

2. デフォルトの設定をファイルタイプ毎に無効に出来る

g:clurin'use_default': 0を指定すれば、デフォルトの設定を全て無効化出来ましたが、ファイルタイプ毎に無効化は出来ませんでした。 各ファイルタイプの設定で、'use_default': 0を指定すれば無効化できるようになりました。

3. 関数内で置換処理を終了できる。

'replace'で関数を指定した場合、'pattern'にマッチしたテキストの置換には指定した関数の戻り値が使用されます。
ただ、複雑な置換をする場合は関数内で置換処理を行って、戻り値は使用しないほうが都合が良いときがあります。
そんな場合は'quit': 1を指定すれば、関数呼び出し後に置換処理を即終了出来ます。

4. 'replace''\2'以降も使えるようにした。

'replace'で使える部分正規表現'\1'だけだったので'\2'以降も使えるようにしました。
ただし、これは破壊的な変更です。
'replace'に指定した関数の第1引数が変わります。

  • before: '\1'の文字列
  • after: '\1'から'\9'までのリスト

最後に

これらの変更でRubydo ~ end{ ~ }の切り替えなど、様々な事が出来るようになりました。
やはり、関数を呼べるのは強力ですね。

vim-clurinはソースが読みやすかったので変更が用意でした。
見習いたいです。