Vim中列出TODO与FIXME等备注的方法
前言
很多程序员,包括我,会在写代码的时候,习惯性的用TODO, FIXME, HACK等作为一些注释的前缀。这样方便自己和后来者预先知道相关注释和代码的状况
不过这样的备注只有是以后恰巧看到这段代码的时候才能看到,没法在一次发版或者空闲的时候,有一个直观的界面能看到这个项目里面所有这样的关键词。
这个时候一个简单的自定义命令兴许能帮到你:
command Todo Ack! '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管理器就已经完成了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
- 传万达网络科技集团将大幅减员90% 业务收缩恐为主因
- 企业技术展望:黑科技解放“黄金”劳动力
- 比特币的SegWit2X分叉将于12月28日重新启动
- 2017年让运营人扎心的30条文案
- R基础——数据的导入与导出(下)
- 深入机器学习系列12-高斯混合模型
- AI时代,教育工作者必备的3大技能
- 邮箱数据防泄漏系统建设
- 你的小程序总是被人吐槽?腾讯做的这款小程序,帮你收集用户意见
- 漫话2017之科技那些事儿
- 代码注入技术Process Doppelgänging利用介绍
- 安卓手机如何玩转动作手势检测?有TensorFlow就够了,附实用教程
- 网秦更名凌动智行 域名nq.com惹关注
- 机器人索菲亚:有学习创造力、同理心和同情心
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SourceInsight4.0的使用
- 基于operator sdk编写k8s自定义资源管理应用
- CAN总线之ISO15765协议
- Linux文本编辑命令
- UCOSii的理解和应用之消息队列
- Linux 编写Shell脚本
- Linux文件权限与归属、文件的特殊权限、文件的隐藏属性
- Linux文件访问控制列表、su命令与sudo服务
- GPS之 NMEA-0183协议
- Zeppelin 安装与初体验
- Hive 安装与配置
- 如何将SAP Cloud for Customer的扩展字段放置到Embedded Component中
- pthread的使用
- shell程序设计
- SAP CDS view权限控制实现原理介绍