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

做一个替换正则表达式,交换逗号周围的两组:

:%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

g如果单行上有多个通量调用,则在末尾添加一个。

于 2012-10-03T22:26:07.230 回答
1

您可以使用替换:

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

这会将 <digit>,i 的每一次出现都变成 i,<digit>。

于 2012-10-03T22:25:03.907 回答
1

是的,这是可能的。这是您给定输入的一种方式,从第一个 f 上的光标开始:

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

于 2012-10-03T22:25:08.323 回答
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 回答