用于包装li标签与VIM之间的所有锚链接的命令?

时间:2014-01-01 12:04:10

标签: html vim

我有这样的事情:

<div class="portfolio" id="portfolio">
<ul id="tiles">
<a href="http://www.lisami520.com/wp-content/uploads/2013/09/311.jpg"><img
class="alignnone size-medium wp-image-278" alt="31"
src="http://www.lisami520.com/wp-content/uploads/2013/09/311-225x300.jpg" width="225" height="300" /></a> <a
href="http://www.lisami520.com/wp-content/uploads/2013/09/302.jpg"><img
class="alignnone size-medium wp-image-277" alt="30"
src="http://www.lisami520.com/wp-content/uploads/2013/09/302-225x300.jpg" width="225" height="300" /></a> <a
href="http://www.lisami520.com/wp-content/uploads/2013/09/292.jpg"><img
class="alignnone size-medium wp-image-276" alt="29"
src="http://www.lisami520.com/wp-content/uploads/2013/09/292-225x300.jpg" width="225" height="300" /></a>

我想用一个命令用<li></li>标签包装所有锚链接。

如何做到这一点?

2 个答案:

答案 0 :(得分:2)

有两个命令吗?

:% s/<a/<li><a/g
:% s@</a>@</a></li>@g
  • : =&gt;输入命令
  • % =&gt;在所有行上都这样做
  • s/xxx/yyy/g =&gt;用yyy代替xxx用于一行(g)上的所有事件
  • s@xxx@yyy@g =&gt;与之前相同,但使用@作为分隔符,因为/是xxx和/或yyy的一部分

答案 1 :(得分:1)

另一种方法是使用\_.元字符,它可以匹配换行符。如果你有嵌套的锚标签,这将失败,但当然这将是无效的HTML。当然,任何使用正则表达式的方法都可能被注释,脚本,字符串等中的匹配所欺骗,所以请谨慎使用。

:%s@<a\>\_.\{-\}</a>@<li>&</li>@g

请注意,我添加了一个词尾项\>,以防有人发明像<apple></apple>之类的标记,并在代码中找到它。此外,非贪婪的.\{-\}而不是.*在这里很重要。

除了@kkeller的回答中的参考文献,请参阅

:help /\>
:help /\_.
:help /\{-