vscode是很多小伙伴写代码最常用到的工具,其中全局搜索使用频率也非常多。比如排查个问题,页面上有个按钮点不了了,这个时候首先要定位这个按钮对应的源代码在哪里嘛,比较快的方式就是复制按钮文字或者class名称之类的,去代码全局搜索。 还有个场景,当需要全局替换一些字符串或者其他什么有固定规律的东西,比如全局的active换成activity,可以这样
一键就可以全局替换了,但是如果当我们要全局替换的东西规则稍微复杂一点,普通全局搜索就很难满足我们的需求了。
比如当Vue2.6升级到Vue2.7之后,css样式穿透的写法推荐从::v-deep换成了:deep(<inner-selector>),如果你还是在用老的写法::v-deep,那么项目运行的控制台会发出警告:
[@vue/compiler-sfc] ::v-deep usage as a combinator has been deprecated. Use :deep(<inner-selector>) instead.
如何才能全局替换成新的样式穿透写法呢?
这里先简单说一下vscode的三种搜索模式:
右边的三个按钮,分别是,大小写敏感、单词匹配、正则模式匹配。前面两种大家应该很常用,第三种用的不多。
如果要实现上述场景的全局匹配替换,需要用到第三种正则模式。
首先,我们需要分析一下规则,原先的写法是::v-deep xxx后面跟上选择器,需要改成:deep(xxx),这里用普通的搜索模式去全局替换就做不到了,需要用到正则模式。
根据规则,正则应该写成这样
/^::v-deep\s(.*)\s/
简单解释一下这个正则的含义,首先^表示以这个符号后面的字符开头,^::v-deep即匹配以::v-deep开头。然后\s表示匹配空白字符,包括空格、换行符、制表符等。(.*)表示匹配任何连续的字符并暂存一个正则变量为$1,\s表示后面接一个空格。
然后我们把替换开关打开,输入:deep($1),点击右下角全部替换按钮,确认,即可完成全局正则替换了。