如何在Vim中复用刚搜索的字符串进行替换,无需重新输入?
Vim复用搜索历史做替换的实用方法
1. 一键复用上次搜索的正则
不用重复输入搜索模式,直接在替换命令里留空搜索部分就行:
:s//替换内容/
比如你刚用/your-regex搜完,输入:s//new-text/g,Vim会自动把上次的搜索正则拿过来当匹配规则,直接完成替换。
2. 调用历史里的任意搜索条目
如果要选更早的搜索记录,在输入:s/之后:
- 按
<C-r>/(Ctrl+r 再按 /),直接插入上次搜索的内容; - 想翻历史的话,按
<C-r>后按/,再用上下箭头选,选中回车就插进去了; - 终端版Vim完全支持这些快捷键,不用GUI复制粘贴那一套。
针对你的注释格式修正的具体操作
你要把/****ABC****/改成/**** ABC *****/(中间内容前后加空格),按这两步来:
- 先调搜索正则:输入
/\(\/\*\{-}\)\(\S\+\)\(\*\{-}\/\),回车确认能匹配目标注释。
拆解下这个正则:\(\/\*\{-}\):抓开头的/加任意数量的*(\{-}是非贪婪匹配,避免匹配过多*);\(\S\+\):抓中间的非空白内容(不管是单个单词还是多个连在一起的);\(\*\{-}\/\):抓结尾的任意数量*加/。
- 执行全局替换:输入
:%s//\1 \2 \3/g,回车搞定。
这里的//直接复用了刚才的搜索正则,\1、\2、\3对应三个捕获组,在中间的\2前后加空格就实现了格式调整。
额外小技巧
- 输入
q/能打开搜索历史窗口,光标选中想要的正则,按y复制,然后在替换命令行按<C-r>"就能粘贴; - 搜索里的特殊字符转义Vim会自动处理,不用手动改。
内容的提问来源于stack exchange,提问作者Alan G
相关产品推荐
相关产品推荐

