美文网首页Mac优雅使用指南
Vim 统计行内特定字符次数,按奇偶替换

Vim 统计行内特定字符次数,按奇偶替换

作者: 千羽之城88 | 来源:发表于2019-10-14 08:38 被阅读0次

    今天遇到一个问题,要统计一个文本行内特定字符的出现次数,同时按照奇数次替换,比如:

    "aaa"aaad"aaaa"
    "aaaa"
    "aaaa
    "aaaa"aaaa"aaa
    "aaaaa"aaaa"aaaa"aaaa"aaaa"
    "aaa"aaaaa

    得到如下内容:

    ``aaa"aaad``aaaa"
    ``aaaa"
    ``aaaa"
    ``aaaa"aaaa``aaa"
    ``aaaaa"aaaa``aaaa"aaaa``aaaa"
    ``aaa"aaaaa

    操作步骤如下:

    :let n=0 | g/"/if(count(getline('.'),'"') % 2 != 0) | s/^ /ok / | endif | let n+=1
    
    1. let n=0
    2. g/"/
    3. if(...) | ... | endif
    4. count(range, char) 统计range里面char的数量
    5. getline('.') 获得当前行内容

    总体翻译过来就是如果“出现次数为奇数,将其行首添加一个ok+空格,这样标记完成后,我们来到有ok的行,处理相应的引号。

    接着,我们进行奇偶替换:

    :let a = ['"', '``']
    :%s/"/\=reverse(a)[0]/g
    
    1. a['...', '...'] 设置一个数组
    2. \=CMD 返回CMD的结果
    3. reverse(a)[0] 数组首尾值交换
      解释一下:
      遇到第一个引号反转数组,返回数组第0项,遇到第二个引号,反转数组,这样数组返回到初始状态,取第一项,如此反复,由于引号总数是偶数,那么奇数次的引号总会被替换成``,偶数次则保留原样。

    相关文章

      网友评论

        本文标题:Vim 统计行内特定字符次数,按奇偶替换

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