我想在 Vim 中使用全局替换来删除所有内容取决于 https
。
前
The website is https://website.com
The website is https://website.com
The website is https://website.com
后
https://website.com
https://website.com
https://website.com
答案1
:%s/.*\(https:\)/\1/
:
让你进入ex
模式。
%
是一种快速表达方式1,$
,表示从第 1 行到末尾
s/
用作分隔符substitute
。/
.*\(https:\)
后面跟着什么https:
,记住 https:
\1
是记住的文本。
答案2
可能不是最好的方法,但它确实有效。
:%s/^.*https/https/g
替换从行首到 的所有https
内容https
。
答案3
到目前为止,其他答案显示了使用正则表达式的通用替换,该正则表达式捕获或复制前缀https
。然而,既然你问的是 Vim,你可以通过漂亮的方式提前结束比赛来避免这些问题\ze
原子:
:%s/.*\zehttps://
这:substitute
在所有行 ( ) 中,从行的开头到 (最后 (!) 匹配) 的:%
所有内容 ( ) (如果一行中可以多次出现,则使用非贪婪匹配 ( )),但结束匹配只是在 ( ) 之前,将其替换为空 ( )。.*
https:
.\{-}
\ze
//
简短的聪明替代方案
注释中已经提到,:global
通过 URL 定位所有行,轻松设置搜索模式,然后从光标位置删除到第一个匹配项 ( dn
):
:global/http/normal! dn
模糊的替代方案
0d/https<CR>qqqqqjdn@qq@q
手动删除当前行的匹配项 ( 0d/https<CR>
),然后清除寄存器q
( qqq
) 并开始记录递归宏( qq
) 转到下一行 ( j
),删除直到匹配 ( dn
),启动递归 ( @q
),结束记录 ( q
),最后触发宏 ( @q
),使其运行直到不再有匹配。
答案4
在这种特殊情况下,由于 URL 中永远不会包含文字空格字符,因此您可以对每一行应用替换,删除最后一个空格之前的所有内容:
:% s/.* //