如何在 vim 状态行中显示字符串的实例数
How to the display the number of instances of a string in 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
我的问题是如何修改函数以 return 字符串在缓冲区中出现的次数 - 类似 TD (6).
您可以 :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
。
不久前我找到了一个在 .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
我的问题是如何修改函数以 return 字符串在缓冲区中出现的次数 - 类似 TD (6).
您可以 :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
。