我需要用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"