我每天都使用vim来处理文本和编写代码。但是,每次我必须执行任何替换或任何形式的正则表达式工作时,都会使我发疯,并且我必须切换到崇高的状态。我想知道,解决这个问题的正确方法是什么:
<img src="whatever.png"/>
<img src="x.png"/>
进入
<img src="<%= image_path("whatever.png") %>"/>
<img src="<%= image_path("x.png") %>"/>
在崇高中,我可以将其用作正则表达式进行搜索:,src="(.*?.png)"并将其用作正则表达式进行替换:src="<%= asset_path("\1") %>"。在vim中,如果这样做::%s/\vsrc="(.*?.png)/src="<%= asset_path("\1") %>"/g我得到:
E62: Nested ?
E476: Invalid command
我做错了什么?
正如@nhahtdh所说,Vim的正则表达式方言\{-}用作非贪婪量词。如果使用非常神奇的标志,那就是{-}。因此您的命令变成:
:%s/\vsrc="(.{-}.png)/src="<%= asset_path("\1") %>"/g
然而,你也没有逃脱.在.png这样:
:%s/\vsrc="(.{-}\.png)/src="<%= asset_path("\1") %>"/g
但是我们仍然可以做得更好!通过使用\zs和\ze我们可以避免重新键入该src="位。\zs并\ze标记将发生替换的比赛的开始和结束。
:%s/\vsrc="\zs(.\{-}\.png)"/<%= image_path("\1") %>"/g
但是,我们仍未完成,因为如果我们仔细选择放置位置\zs,\ze然后可以&在替换中使用vim的话,我们可以将它进一步发展。就像\0Perl的regex语法一样。现在我们不需要任何捕获组,这不需要使用非常神奇的标志。
:%s/src="\zs.\{-}\.png\ze"/<%= image_path("&") %>/g
有关更多帮助,请参见以下文档:
:h /\zs
:h /\{-
:h s/\&
| 归档时间: | 
 | 
| 查看次数: | 1774 次 | 
| 最近记录: |