【问题标题】:How to the display the number of instances of a string in vim statusline如何在vim状态行中显示字符串的实例数
【发布时间】:2021-02-05 04:17:20
【问题描述】:

前段时间我找到了一个在 .vimrc 中使用的函数来显示当前缓冲区中是否存在 " TODO " 并在状态行中显示 TD。这是函数:

...
hi If_TODO_COLOR ctermbg=0 ctermfg=175 cterm=bold
set statusline+=%#If_TODO_COLOR#%{If_TODO()}
...

function! If_TODO()
    let todos = join(getline(1, '$'), "\n")
    if todos =~? " TODO "
        return " TD "
    else
        return ""
    endif
endfunction

我的问题是如何修改函数以返回字符串在缓冲区中出现的次数 - 类似于 TD (6)

【问题讨论】:

    标签: function vim statusline


    【解决方案1】:

    您可以通过:help filter() 获取包含TODO 的行列表:

    let lines = getline(1, '$')
    let todos = filter(lines, 'v:val =~? " TODO "')
    return len(todos) > 0 ? 'TD' : ''
    

    同样的东西,以稍微“现代”的方式表达:

    return getline(1, '$')
        \ ->filter('v:val =~? " TODO "')
        \ ->len() > 0 ? 'TD' : ''
    

    :help method

    【讨论】:

    • 第一个效果很好。正是我想要的。谢谢。
    猜你喜欢
    • 2021-08-08
    • 2017-03-23
    • 2015-10-03
    • 2015-04-01
    • 2011-09-06
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多