簡體   English   中英

Vim用特定條件替換模式

[英]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行上進行了pattern2replacement

原始答案:

以下模式應該可以滿足您的要求: /[^*]\\{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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM