首页 > 解决方案 > 如何在 vim statusline 中显示字符串的实例数

问题描述

不久前,我找到了一个在 .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)

标签: functionvimstatusline

解决方案


您可以: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


推荐阅读