vim、三項条件演算子の第二項と第三項を入れかえる
nnoremap e3 :s/?\s*\((.\{-1,})\\|\S\+\)\s*:\s*\((.\{-1,})\\|\S\+\)/? \2 : \1/<CR>でいける。
以下つくりかたのメモ
#!/usr/bin/env perl
use strict;
use warnings;
use Test::Most;
my $tests = [
'aa ? bb : cc' => 'aa ? cc : bb',
'aa ? bb : cc | foobar' => 'aa ? cc : bb | foobar',
'aa ? (bb bb) : (cc cc)' => 'aa ? (cc cc) : (bb bb)',
];
while (my ($a, $b) = splice @$tests, 0, 2) {
$a =~ s/\?\s*(\(.+?\)|\S+)\s*:\s*(\(.+?\)|\S+)/? $2 : $1/;
is $a, $b;
}
done_testing;みたいなのを書いて正規表現を確定させる
eregex.vim を入れた状態で
:echo E2v('\?\s*(\(.+?\)|\S+)\s*:\s*(\(.+?\)|\S+)')する
でてきた正規表現でだいたいいいのだけれど .vimrc に書くと \| が | として認識されるので \| は \\| にさらに置換する