Vim 使用 OR 运算符和可视模式选定文本的多个模式替换
Vim substitution with multiple pattern with OR operator and visual mode selected text
我有:
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:e | s:dw\([2-4]\):dw1:e
但它仅通过给出 :
替换第一个 up
RT_T_up12 = CubicSpline(z_alot, RT_tab_up2)
RT_T_dw2 = CubicSpline(z_alot, RT_tab_dw2)
RT_T_up13 = CubicSpline(z_alot, RT_tab_up3)
RT_T_dw3 = CubicSpline(z_alot, RT_tab_dw3)
RT_T_up14 = CubicSpline(z_alot, RT_tab_up4)
RT_T_dw4 = CubicSpline(z_alot, RT_tab_dw4)
如何在每个 up
和 dw
模式之后插入一个“1
”?
使用交替运算符进行嵌套分组
我为 up
和 dw
创建了子表达式组,并将它们与交替运算符 \|
嵌套在一起。
正如@wobr 所指出的,使用 g
标志对给定行上的所有事件执行替换。您可以在此处阅读有关替换标志的信息,:help :s_flags
。
我在替换字符串中仅引用子表达式组 </code> 和 <code>
:
'<,'>s/\(\(up\)\|\(dw\)\)\([2-4]\)//ge
e
标志只是防止搜索模式失败时出现错误消息。大多数人不介意错误信息。
如何正确引用子表达式组
在你的模式中从左到右,计算起始括号,(
。计数将是子表达式的引用编号:
这在 :help pattern
中有所提及。
这是此命令的前后对比:
之后:
在您的特定情况下,如果条目全部对齐到同一列并且您想对所有条目应用相同的修改 ("insert 1"),您也可以使用可视块模式来完成此操作任务。
执行以下命令序列:
f2
: 移动光标到第一行字符2
。
<C-V>
: 进入可视块模式。
5j
:将选区扩展到接下来的5行,覆盖所有要修改的条目。
I1<Esc>
:在可视块前插入“1”。当您按下 Escape 键时,所有其他行将收到相同的修改。
2f2
: 将光标移动到第一行的最后一个“2”。
.
:重复。这将在您现在所在的列中再次插入“1”,行数相同。
我的尝试:
:%s/\v(up|dw)//g
\v .................... very magic
(up|dw) ............... up or dw
.................... reinserts the regex group
1 .................... here our desired 1
我有:
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:e | s:dw\([2-4]\):dw1:e
但它仅通过给出 :
替换第一个up
RT_T_up12 = CubicSpline(z_alot, RT_tab_up2)
RT_T_dw2 = CubicSpline(z_alot, RT_tab_dw2)
RT_T_up13 = CubicSpline(z_alot, RT_tab_up3)
RT_T_dw3 = CubicSpline(z_alot, RT_tab_dw3)
RT_T_up14 = CubicSpline(z_alot, RT_tab_up4)
RT_T_dw4 = CubicSpline(z_alot, RT_tab_dw4)
如何在每个 up
和 dw
模式之后插入一个“1
”?
使用交替运算符进行嵌套分组
我为 up
和 dw
创建了子表达式组,并将它们与交替运算符 \|
嵌套在一起。
正如@wobr 所指出的,使用 g
标志对给定行上的所有事件执行替换。您可以在此处阅读有关替换标志的信息,:help :s_flags
。
我在替换字符串中仅引用子表达式组 </code> 和 <code>
:
'<,'>s/\(\(up\)\|\(dw\)\)\([2-4]\)//ge
e
标志只是防止搜索模式失败时出现错误消息。大多数人不介意错误信息。
如何正确引用子表达式组
在你的模式中从左到右,计算起始括号,(
。计数将是子表达式的引用编号:
这在 :help pattern
中有所提及。
这是此命令的前后对比:
之后:
在您的特定情况下,如果条目全部对齐到同一列并且您想对所有条目应用相同的修改 ("insert 1"),您也可以使用可视块模式来完成此操作任务。
执行以下命令序列:
f2
: 移动光标到第一行字符2
。<C-V>
: 进入可视块模式。5j
:将选区扩展到接下来的5行,覆盖所有要修改的条目。I1<Esc>
:在可视块前插入“1”。当您按下 Escape 键时,所有其他行将收到相同的修改。2f2
: 将光标移动到第一行的最后一个“2”。.
:重复。这将在您现在所在的列中再次插入“1”,行数相同。
我的尝试:
:%s/\v(up|dw)//g
\v .................... very magic
(up|dw) ............... up or dw
.................... reinserts the regex group
1 .................... here our desired 1