Vim替换具有或操作员和视觉模式选择文本的多模式

Vim替换具有或操作员和视觉模式选择文本的多模式,vim,sed,replace,substitution,Vim,Sed,Replace,Substitution,我有: RT_T_up2 = CubicSpline(z_alot, RT_tab_up2) RT_T_dw2 = CubicSpline(z_alot, RT_tab_dw2) RT_T_up3 = CubicSpline(z_alot, RT_tab_up3) RT_T_dw3 = CubicSpline(z_alot, RT_tab_dw3) RT_T_up4 = CubicSpline(z_alot, RT_tab_up4) RT_T_dw4 = CubicSpline(z_alot,

我有:

RT_T_up2 = CubicSpline(z_alot, RT_tab_up2)
RT_T_dw2 = CubicSpline(z_alot, RT_tab_dw2)
RT_T_up3 = CubicSpline(z_alot, RT_tab_up3)
RT_T_dw3 = CubicSpline(z_alot, RT_tab_dw3)
RT_T_up4 = CubicSpline(z_alot, RT_tab_up4)
RT_T_dw4 = CubicSpline(z_alot, RT_tab_dw4)
我想在up和dw前面加一个“1”,即:

RT_T_up12 = CubicSpline(z_alot, RT_tab_up12)
RT_T_dw12 = CubicSpline(z_alot, RT_tab_dw12)
RT_T_up13 = CubicSpline(z_alot, RT_tab_up13)
RT_T_dw13 = CubicSpline(z_alot, RT_tab_dw13)
RT_T_up14 = CubicSpline(z_alot, RT_tab_up14)
RT_T_dw14 = CubicSpline(z_alot, RT_tab_dw14)
原始文本是通过vim的视觉模式选择的

我试着做:

:'<,'>s:up\([2-4]\):up1\1:e |  s:dw\([2-4]\):dw1\1:e

如何在每个
up
dw
模式之后插入“
1
”?

使用带交替运算符的嵌套分组

我为
up
dw
创建了子表达式组,并将它们与交替操作符
\\\\
嵌套在一起

如@wobr所示,使用
g
标志对给定行上的所有事件执行替换。您可以在此处阅读有关替换标志的信息,
:help:s\u flags

我在替换字符串中仅引用子扩展组
\1
\4

'<,'>s/\(\(up\)\|\(dw\)\)\([2-4]\)/\11\4/ge

”在您的特定情况下,如果所有条目都与同一列对齐,并且您希望对所有条目应用相同的修改(“插入1”),您也可以使用可视块模式来完成此任务

执行以下命令序列:

  • f2
    :将光标移动到第一行的字符
    2
  • :进入可视块模式
  • 5j
    :将选择范围扩展到接下来的5行,覆盖所有要修改的条目
  • I1
    :在可视块前插入“1”。按Escape键时,所有其他行将收到相同的修改
  • 2f2
    :将光标移动到第一行的最后一个“2”
  • :重复。这将在您现在所在的列中,在相同的行数上再次插入“1”
我的尝试:

:%s/\v(up|dw)/\11/g

\v .................... very magic
(up|dw) ............... up or dw
\1 .................... reinserts the regex group
1  .................... here our desired 1

我认为您需要将g标志添加到substitutionStackOverflow,它致力于帮助解决编程代码问题。您的Q似乎更适合or,但请阅读他们关于主题问题的帮助部分。在这里发布更多Qs之前,请阅读和。祝你好运。谢谢你的解决方案。只是一个问题:当我们用
\4
打印时,为什么模式
\([2-4]\)
被视为第四组,而不是
\3
,也就是说,我不明白为什么它不是第三组,所以我们宁愿写:
”@youpilat13我更新了答案,以回答您关于引用子表达式(组)的问题.魔术确实让它看起来又漂亮又干净。
:%s/\v(up|dw)/\11/g

\v .................... very magic
(up|dw) ............... up or dw
\1 .................... reinserts the regex group
1  .................... here our desired 1