不久前,我需要在.vimrc中找到一个函数,以显示当前缓冲区中是否存在" TODO ",并在statusline中显示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)。
发布于 2021-02-04 20:10:22
您可以: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。
https://stackoverflow.com/questions/66051261
复制相似问题