したがって、基本的にいくつかのコードをコピー/貼り付けて、各行の前にコードを追加して追加する必要があります。各行は関数呼び出しであり、その用語に従ってスイッチ文に追加されます。
これで、次のようになります。
switch(n)
{
case 1: retVal = foo("bar"); break;
case 2: retVal = foo("Bar"); break;
foo("bAr");
foo("BAr");
foo("BAR");
}
次のように表示する必要があります。
switch(n)
{
case 1: retVal = foo("bar"); break;
case 2: retVal = foo("Bar"); break;
case 3: retVal = foo("bAr"); break;
case 4: retVal = foo("BAr"); break;
case 5: retVal = foo("BAR"); break;
}
私が思いついた最高は次のとおりです。
:'<,'>s/I DONT KNOW/case SOMETHING: retVal = & break;/g
何が変わるI DON'T KNOW
べきですか?SOMETHING
問題は、私が正規表現に慣れておらず、何を入れるべきかわからないということです。どんなアイデアがありますか?
編集:Muruの回答を見た後に投稿する必要があることに気づきました。これ番号付きセクションへのリンクです。例11は、正規表現を使用してシーケンス番号を再割り当てする方法の1つを示しています(既存のシーケンスがあると仮定)。
答え1
ビジュアルモードの選択が行に限定されていると仮定すると、foo(...);
私が考えることができる最善の方法は次のとおりです。
:let c=2|'<,'>g//let c=c+1|s/\v\S+/\="case ".c.": retVal = ".submatch(0)." break;"/
より読みやすい:
let counter = 2
'<,'>g// " for some reason, we need both markers and g// for `let` to work
let counter = counter + 1
s/
\v " `\v` is "very magic"
\S+/ " used for `\S` - all non-whitespace characters
\= " Indicate that replacement is an expression
"case " . " `.` concatenates strings
counter .
": retVal = " .
submatch(0) .
" break;"
/
から適応このVim Wikiの投稿。
はい、わかりました。これはとても醜いです。より良い方法があります。
別の方法はマクロを使用することです:(最初の行から始めて、なしcase
)
qq
k:s/\v(case \d+: retVal = )(.*)\n(\s*)(.*)/\1\2\r\1\4 break;/|exe "norm \<c-a>"
j
q
@q
次に、残りの行と同じ数回使用します。