[英]Vim replace pattern with specific condition
我需要在Vim中用\\rdo
替換;\\s*\\<do\\>
。 但是,如果有Fortran注釋符號,我還需要確保;\\s*\\<do\\>
不被替換!
在它之前,即在搜索模式!.*;\\s*\\<do\\>
。 例如, ; do
; do
在取消注釋行
j=2; do i=1, 10
應該替換為
j=2
do i=1,10
但是; do
; 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
行上進行了pattern2
的replacement
。
原始答案:
以下模式應該可以滿足您的要求: /[^*]\\{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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.