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管理器就已经完成了。

总结

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

时间: 2017-06-10

Cygwin下安装vim后,vim中退格键无法正常使用的解决方法

问题描述: 在Cygwin中安装完vim后 进入vim,发现上下左右键和退格键都无法正常使用 问题分析: 首先考虑到的就是缺少vim的配置文件,首先查看/etc路径下是否有vim的配置文件 admin@ThinkPad /etc $ cd /etc admin@ThinkPad /etc $ ls -a|grep vimrc发现/etc下没有vim的全局配置文件,然后再查找当前用户的vim配置文件.vimrc admin@ThinkPad /etc $ cd ~ admin@ThinkPad ~

浅谈Vim中的Tab与空格缩进

vim缩进参数解析 缩进用 tab 制表符还是空格,个人爱好问题.但是在大多项目中,习惯使用空格.关于缩进,vim中可以通过如下四个参数进行配置 set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab / expandtab1 解析: tabstop 表示按一个tab之后,显示出来的相当于几个空格,默认的是8个. softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度. shiftwidth 表示每一级缩

Vim中宏命令的使用实例详解

前言 Vim 的设计哲学中有这样一句话:"if you write a thing once, it is okay. However if you're writing it twice or more times, then you should find a better way to do it". Vim 的 Macro 就是用来解决重复的问题.在 Vim 寄存器的文章里面已经对 macro 有所涉及, macro 的操作都是以文本的方式存放在寄存器中. 宏是一组命令的集合,

Vim中的几种文件备份方法总结

一.Vim 的交换文件 .filename.swp 默认交换文件在打开文件的时候就会产生交换文件,正常退出的时候才会删除交换文件(断电,Ctrl+Z强制退出就不会删除),内容大致是这个样子. 通过在 Vim 配置文件设置 set noswapfile 来关闭交换文件. 二. Vim 的备份文件 filename~ 默认关闭,需要通过设置 set backup 来开启,Unbuntu的Vim配置文件是 /etc/vim/vimrc 开启后,对文件进行修改后会保存修改之前的一个副本,展示如下: 如果

Vim中特殊字符的读写详解

一.查看特殊字符 Vim中可见特殊字符会直接显示,不可见特殊字符会显示为该字符在命令行的输入方式, 例如\r显示为^M.通过:help digraph-table可看到所有Vim中可输入的特殊字符, 该文档的第一页如下: char digraph hex dec official name ^@ NU 0x00 0 NULL (NUL) ^A SH 0x01 1 START OF HEADING (SOH) ^B SX 0x02 2 START OF TEXT (STX) ^C EX 0x03

Vim中文件编码处理与重新打开乱码文件详解

前言 Vim 中有两个与编码有关的变量,如果理解了基本就不会再为编码问题头疼了. encoding  :Vim 内部编码,例如 buffer.寄存器.文本等.这个值一般用户不要设置,另外打开 Vim 之后再设置这个值也是没有意义的.大家可以将这个值看作是 Vim 程序自己的变量,如果在工作中遇到文件的编码问题,和 encoding  这个变量是万万没有关系的. fileencoding  :顾名思义了,就是文件的编码. 此外还有一个值,叫 fileencodings 是个复数.一般我们将这个值在

vim 中进行列编辑的方法

在vim中列编辑的功能还是经常使用的,使用了几次,特做个总结. 主要的使用如下: 1:进入列模式下: 移动光标到要注释区块的第一行,Unix下按Ctrl+v,Windows版本的VIM则按Ctrl+Q 2:选择所需要的列:光标移动到要注释区块的最后一行(若干个j,或者直接输入行号再按G,或者按G到最后一行) 3:针对列的操作: 例如 删除 输入d :       替换 输入c :       需要输入则 按Shift+i,然后输入内容 4:然后退出保存:按两次ESC --------------

Linux如何在Vim中更改颜色和主题

Vim是我们在Linux中非常常用的一款文本编辑器.Vim 是一款免费.开源的文本编辑器,它的功能和许多其他的文本编辑器大致相同,比如 Sublime 和 Notepad++ .Vim既可以在命令行中执行,也可以在图形界面中操作. Vim 的教程有很多,本文我们主要讲的是如何更改 Vim 的颜色和主题. Vim 对于初学者来讲的话,其实不是非常友好.但如果你熟练使用了 Vim 之后,你就会发现,你再也离不开 Vim 了. Vim的主题的什么东西? 所谓的主题,其实本质上就是一种配色方案,也就是一

在Vue组件化中利用axios处理ajax请求的使用方法

本文主要给大家介绍了关于在Vue组件化中利用axios处理ajax请求的使用方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 推荐方式 首先在 main.js 中引入 axios // 引入 axios import axios from 'axios' 这时候如果你想在其它的组件中使用axios进行ajax请求是或提示报错的,报错内容大致是axios is undefined. 我们通常的决绝方案是将axios改写为 Vue 的原型属性,如2 将axios写入Vue的原型