欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Vim中列出TODO与FIXME等备注的方法

程序员文章站 2022-08-26 13:50:06
前言 很多程序员,包括我,会在写代码的时候,习惯性的用todo, fixme, hack等作为一些注释的前缀。这样方便自己和后来者预先知道相关注释和代码的状况 不过这样...

前言

很多程序员,包括我,会在写代码的时候,习惯性的用todo, fixme, hack等作为一些注释的前缀。这样方便自己和后来者预先知道相关注释和代码的状况

不过这样的备注只有是以后恰巧看到这段代码的时候才能看到,没法在一次发版或者空闲的时候,有一个直观的界面能看到这个项目里面所有这样的关键词。

这个时候一个简单的自定义命令兴许能帮到你:

command todo ack! 'todo\|fixme'

效果如下:

Vim中列出TODO与FIXME等备注的方法

不过要想使这条命令生效,需要一些环境准备工作

ack

首先我们需要安装ack或者ag,这两个都是命令行下的一个全局搜索工具,比系统自带的grep要快很多的。

这里的安装以ag为例,因为这个是基于c来重写的ack并新增了很多特性,效率也是比ack快了很多的。

# osx
brew install the_silver_searcher
# archlinux
pacman -s the_silver_searcher
# ubuntu
apt-get install silversearcher-ag

在安装完成之后,就可以在shell里面测试一下

ag todo ./

ack.vim

ack.vim是一款插件,用来方便在vim里面使用ack/ag, 然后通过quickfix来提供搜索结果

不过这款插件,默认是使用的ack作为搜索引擎,为了能用上我们刚刚安装的ag,需要在~/.vimrc里面作一些配置:

if executable('ag')
 let g:ackprg = 'ag --vimgrep'
endif

这段配置是引用的官方仓库的readme

不过也看很多人是用的

if executable('ag')
 let g:ackprg = 'ag --nogroup --nocolor --column'
endif

本人测试之后,发现二者并没有什么区别。可能对于ag来说 --vimgrep是等同于--nogroup --nocolor --column 的。

这个时候在vim的命令行里面输入

:ack! todo 

是可以实现上图所示效果的,而且还可以通过

:ackadd fixme

这样的方式来附加其它要查看的。

不过这样的方式,命令还是有点长。所以配置一个alias来替代上面的命令,是一个比较符合懒人的想法

~/.vimrc里面新增

command todo ack! 'todo\|fixme'

然后在vim的命令行里面输入:

:todo

就能实现列出当前项目里面的所有todo,fixme了,而且可以根据自己的需要来扩展这样的关键字,像我就扩展为如下代码:

command todo ack! 'todo|fixme|changed|bug|hack'
command debug ack! 'note|info|idea'

区分了todo和debug两种功能。

高亮

vim里面会自动的高亮todo、fixme,但是不会高亮changed这样的关键字,所以需要手动的来指定一下,在~/.vimrc里面添加如下配置:

if has("autocmd")
 " highlight todo, fixme, note, etc.
 if v:version > 701
 autocmd syntax * call matchadd('todo', '\w\zs\(todo\|fixme\|changed\|bug\|hack\)')
 autocmd syntax * call matchadd('debug', '\w\zs\(note\|info\|idea\)')
 endif
endif

上面这段代码是摘抄的,具体的功能就是匹配todo等关键字,然后加上语法高亮。

综上,一个简单好用的todo管理器就已经完成了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。