|
vi中的某个关键字匹配到某个关键字,包含多行
列PIN Q0
DIRECTION OUTPUT ;
USE CLOCK ; ← 被替换为 USE SIGNAL ;
PIN Q5
MODE INPUT ;
USE SIGNAL ; ← 被替换为 USE SIGNAL ; 这里的Q后面的数字会变化且只替换这个Q后面的USE CLOCK到USE SIGNAL
:%s/\(PIN Q\d\_.\{-}USE\) CLOCK ;/\1 SIGNAL ;/g
解释:
Q\d:匹配 Q0 到 Q9(\d 表示任意数字)。
\_.\{-}:非贪婪匹配任意字符(包括换行),直到 USE。
\1:保留 PIN Qx ... USE 部分,仅替换 CLOCK 为 SIGNAL。
方法 3:使用 :g 全局命令(适用于多行范围)
如果 PIN Qx 和 USE CLOCK ; 之间可能有复杂内容,可以:
vim
:g/PIN Q[0-9]/,/USE CLOCK ;/s/USE CLOCK ;/USE SIGNAL ;/g
解释:
:g/PIN Q[0-9]/:查找所有 PIN Q0 到 PIN Q9 的行。
,/USE CLOCK ;/:从 PIN Qx 行开始,到 USE CLOCK ; 结束。
s/USE CLOCK ;/USE SIGNAL ;/g:替换匹配范围内的 USE CLOCK ;。
关键点总结
语法 作用
Q\d 或 Q[0-9] 匹配 Q0 到 Q9
\_.\{-} 非贪婪匹配任意字符(包括换行)
\1 引用第一个捕获组(保留匹配部分)
:g/start/,/end/cmd 从 start 到 end 执行 cmd
\d 匹配数字 D\d → D0, D1, D2
\_[^;]* 匹配任意字符(包括换行),直到 ; PIN D0 ... ;
\1 引用第一个捕获组 \(PIN D\d\) → \1
:g/pattern/cmd 对所有匹配 pattern 的行执行 cmd :g/PIN D\d/s/.../.../
|
|