1

これを変換するコマンドはありますか?

flux(1,i)
flux(2,i)
flux(3,i)
flux(4,i)
flux(5,i)

VIでこれに?

flux(i,1)
flux(i,2)
flux(i,3)
flux(i,4)
flux(i,5)

一般的に私はに変換flux(a,b)したいflux(b,a)

4

4 に答える 4

2

コンマの周りの 2 つのグループを交換して、置換正規表現を実行します。

:%s/flux(\([^,]*\),\([^)]*\))/flux(\2,\1)/

内訳:

:%s/       #global replace
flux(      #find 'flux('
\([^,]*\), #match everything until a comma into group 1
\([^)]*\)) #match everything until a ')' into group 2
/          #replace with:
flux(      #text 'flux('
\2,\1      #group 2, followed by group 1
)/         #close parenthesis and end match

g1 行に複数のフラックス呼び出しがある場合は、最後に a を追加します。

于 2012-10-03T22:26:07.230 に答える
1

コマンドモードから:

:%! m4 -Dflux='`flux($2,$1)'"'"

これにより、現在のバッファが実行さm4れ、置換が実行されます。これにより、改行にまたがる入力、ネストされた括弧を含む入力、または再帰的な入力が正しく置き換えられることに注意してください。例えば、

flux(text that contains parens
  and (spans) a newline,flux( q, r ) )

に置き換えられます

flux(flux(r ,q) ,text that contains parens
  and (spans) a newline)

ネストされた親が一致しない場合、エラーが発生します。また、fluxに対する引数の先頭のスペースは破棄されますが、これは、正規表現のマッチングで実行しようとするものよりもはるかに堅牢なソリューションです。

于 2012-10-03T22:34:03.493 に答える
1

置換を使用できます:

:%s/\([0-9]\),i/i,\1/g

これにより、すべての <digit>,i の出現が i,<digit> に変わります。

于 2012-10-03T22:25:03.907 に答える
1

はい、可能です。最初の f のカーソルから始めて、与えられた入力の 1 つの方法を次に示します。

f1<c-q>4jxlphh<c-q>4jxp

于 2012-10-03T22:25:08.323 に答える