前

我想在 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/.* //

相关内容