VIM用特定条件替换模式



我需要用vim中的rdo替换;s*<do>。但是,我还需要确保如果在搜索模式 !.*;s*<do>中有fortran注释符号 !,则不会替换;s*<do>。例如,在未注册的行中的; do

j=2; do i=1, 10

应替换为

j=2
do i=1,10

,但不应更换以下评论部分中的; do

 k=3 ! j=2; do i=1, 10 

我该如何在vim中执行此操作?我尝试了(!.*)@!;s*<do>,但它不起作用。

我根据您的示例编辑了此答案:

尝试使用:g!/<pattern1>/s/<pattern2>/<replacement>/g

:g!/!.*/s/v;s*do/rdo/g

这仅在不包含pattern1的行上替换replacement的CC_11。

原始答案:

以下模式应执行您要求的操作:/[^*]{0,1}zs;\s*\<do\>。您可以使用它用它替换为您想要的任何东西,例如%s/<pattern>/rdo/g

:v/!/ s/; /r/g
:v  .......... global negation (all lines without pattern)
/!/ .......... all lines not containing !
s ............ substitution
; ............ semicolon space
r ........... Carriage return "Enter"

最新更新