function - 如何在 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)。
解决方案
您可以: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
。
推荐阅读
- r - 在一个图中使用 geom_point 和 geom_pointrange 时如何维护因子顺序?
- javascript - 在调用 setState 之前修改的 React 组件状态
- php - 为什么在dockerfile中运行的composer install命令中看不到卷目录中的composer.json文件?
- c# - Xamarin.forms 从按钮单击页面导航到 shell 中的不同页面
- ios - 如何在 SwiftUI 中以编程方式滚动列表?
- enterprise-architect - 如何在 Enterprise Architect 中自动添加标记值类型和编辑模板
- visual-studio-code - launch.json- serverless - 属性程序不存在
- python - Python:曲面图未正确表示数据集
- sbt - 如何调试 SBT 发布期间执行的请求/响应的 HTTP 标头?
- sql-server - Where 子句中的函数导致查询优化问题