根据出现的次序智能地替换 Emacs 方案
例如,有一段如下的HTML代码:
<ul>
<li>first</li>
<li>second</li>
<li>third</li>
</ul>
<ul>
<li>first</li>
<li>second</li>
</ul>
<ul>
<li>first</li>
<li>second</li>
<li>third</li>
</ul>
我希望把<li>按照出现在的次序,第奇数行添加class="odd"
,第偶数行添加class="event"
;并且每个<ul>要独立设置,即每个<ul>的第一个<li>永远是<li class="odd">。
像这种看起来很相似,规则又不是非常通用的替换规则,在遇到Emacs之前,我还真不知道有什么简单的方法。来看看Emacs的解决方法,匹配如下正则表达式,其中换行符用C-q C-j
输入
\(\(<ul>[
]*\)?<li\)
最终输出如下:
<ul>
<li class="odd">first</li>
<li class="event">second</li>
<li class="odd">third</li>
</ul>
<ul>
<li class="odd">first</li>
<li class="event">second</li>
</ul>
<ul>
<li class="odd">first</li>
<li class="event">second</li>
<li class="odd">third</li>
</ul>
vim 的方案
g/./if(getline(".")=="<ul>") | let i=0 | let idx=1 | elseif( (i+idx)%2 == 0 ) | s/<li/& class=\"odd\"/ | else | s/<li/& class=\"even\"/ | endif | let idx+=1
网友评论