美文网首页
Vim 奇偶替换特征行

Vim 奇偶替换特征行

作者: 千羽之城88 | 来源:发表于2020-11-03 23:33 被阅读0次

    根据出现的次序智能地替换 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
    

    链接:https://www.zhihu.com/question/30898636/answer/53340291

    相关文章

      网友评论

          本文标题:Vim 奇偶替换特征行

          本文链接:https://www.haomeiwen.com/subject/eelwvktx.html