1. 生成c、c++公共库标签文件
ctags -R -I __THROW -I attribute_pure -I __nonnull -I attribute --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/c.tag /usr/include/* --exclude=/usr/include/python2.7/*
set tags+=~/.vim/tags/c.tag
ctags file_name1.c filename2.c filename3.h来产生ctags文件或者ctags *.c *.h
2. 内核:
ctags默认使用这个命令,--exclude要排除的文件,--links针对符号链接是否延伸,使用-n参数表示用行号索引,一旦更改源文件行号容易变,需要重新生成请添加链接描述ctags默认使用这个命令,--exclude要排除的文件,--links针对符号链接是否延伸,使用-n参数表示用行号索引,一旦更改源文件行号容易变,需要重新生成请添加链接描述
ctags -n -R --links=yes --c-kinds=+p --fields=+iaSz --exclude=samples/* --exclude=tools/*
在源码目录下通过命令make tags(也可使用:ctags -R)生成标签文件
cscope -Rbqk
k跳过/usr/include/*
字段补全
为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是: ctags -R --c++-kinds=+px --fields=+iaS --extra=+q 其中: 选项c++-kinds 用于指定C++语言的 tags记录类型, --c-kinds用于指定c语言的, 通用格式是 --{language}-kinds 选项 fileds 用于指定每条标记的扩展字段域 extra 选项用于增加额外的条目: f表示为每个文件增加一个条目, q为每个类增加一个条目
如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
set tags=tags;
set autochdir
第一个命令里的分号是必不可少的,这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
vimgrep
vimgrep /匹配模式/[g][j] 要搜索的文件/范围
g: 表示是否把每一行的多个匹配结果都加入
j: 表示是否搜索完后定位到第一个匹配的位置
vimgrep /pattern/% 在当前打开文件中查找
vimgrep /pattern/ * 在当前目录下查找所有
vimgrep /pattern/ ** 在当前目录及其子目录下查找所有
vimgrep /pattern/ *.c 查找当前目录下所有的.c文件
vimgrep /pattern/ */ 只查找子目录
cn 查找下一个 cp 查找上一个
vim打开多个文件
vim file1 file2 file3 file4
或者进入vim后使用:e文档名来打开文档
:n 跳到后面那个文件
:N 跳到前面那个文件
:files查看打开了哪些文件
:file 查看当前的文件名
vim自动补全
ctrl + n或者ctrl + p
复制vim文件中所有内容
gg 回到文件首
shift + v 进入VISUAL LINE模式
shift + g 全选所有内容
ctrl + v 复制所选的内容
quickfix是vim的标准插件,本身就带有
quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极大地提高编译错误的修改效率
quick常用命令:
:cc 显示详细错误信息
:cp 跳到上一个错误
:cn 跳到下一个错误
:cl 列出所有的错误
:copen 打开quickfix窗口,可以在后面添加窗口高度参数,如10行,:copen 10
:cclose 关闭quickfix窗口
vim的recording功能
第一步:在正常模式下(非insert模式、非visual模式)按下q键盘 第二步:选择a-z或0-9中任意一个作为缓冲器的名字,准备开始录制宏 第三步:正常的操作,此次所有的操作都会被记录在上一步中定义的缓冲器中 第四步:在非insert模式下输入q停止宏的录制 第五步:使用@ + 第二步中定义的缓冲器的名字即可就可以使用录制的命令了。
快捷键
1、高亮所有搜索模式匹配,搜索
shift + * 向后搜索光标所在位置的单词
shift + # 向前搜索光标所在位置的单词
, # 可对光标处的词向前/向后做全词搜索,g, g# 做相对应的非全词匹配搜索 位置历史,打开历史的文件,前一个后一个 Ctrl-O 在历史记录中后台,Ctrl-I 则为前进。
:set hlsearch 高亮所有匹配的字符串
:nohlsearch 临时关闭
:set nohlsearch 彻底关闭,只有重新:set hlsearch才可以高亮搜索
3.:ts(列出符号的定义tselect的缩写): :tj x 如果只找到一个符号定义,那么直接跳转到符号定义处,如果有多个,则让用户自行选择。 4.:tp(前一个符号)---此命令不常用,可以不用记 5.:tn(后一个符号) ---此命令不常用,可以不用记 6.Ctrl+ ]跳到光标所在函数或者结构体的定义处 7.Ctrl+ T返回上一个标签 8. Ctrl+O 返回上一个标签 如果找到的标签并不唯一,所以还需要配合使用下述命令: tfirst:跳至第一个 :[count]tprevious 向前 [count] 个匹配 :[count]tnext 向后 [count] 个匹配 tlast:跳至最后一个
:stag TagName 新窗口分屏窗口显示TagName标签,光标跳到标签处 Ctrl+W + ] 新窗口分屏窗口显示当前光标下单词的标签,光标跳到标签处
以下命令将在分屏预览窗口显示标签 :ptag TagName 预览窗口显示TagName标签,光标跳到标签处 :pclose 关闭预览窗口 :pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用) :psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。
:n 跳到后面那个文件 :N 跳到前面那个文件 :files查看打开了哪些文件 :file 查看当前的文件名
即简单地补全到本文档中已有的词:vim自动补全ctrl + n(第一个)或者ctrl + p(最后一个) 此时有一些快捷键可以用: Ctrl+P 向前切换成员 Ctrl+N 向后切换成员 Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字 Ctrl+Y 表示退出下拉窗口, 并接受当前选项
vim中的其他补全方式还有:全局搜索 Ctrl+XCtrl+L 整行补全 Ctrl+X Ctrl+N 根据当前文件里关键字补全 Ctrl+X Ctrl+K 根据字典补全 Ctrl+X Ctrl+T 根据同义词字典补全 Ctrl+X Ctrl+I 根据头文件内关键字补全 Ctrl+X Ctrl+] 根据标签补全 Ctrl+X Ctrl+F 补全文件名 Ctrl+X Ctrl+D 补全宏定义 Ctrl+X Ctrl+V 补全vim命令 Ctrl+X Ctrl+U 用户自定义补全方式 Ctrl+X Ctrl+S 拼写建议
15、vim的recording功能
第一步:在正常模式下(非insert模式、非visual模式)按下q键盘 第二步:选择a-z或0-9中任意一个作为缓冲器的名字,准备开始录制宏 第三步:正常的操作,此次所有的操作都会被记录在上一步中定义的缓冲器中 第四步:在非insert模式下输入q停止宏的录制 第五步:使用@ + 第二步中定义的缓冲器的名字即可就可以使用录制的命令了。
g + ] 可以查看当前函数的所有位置的定义 q: 显示vim命令历史
17、块选择 v 会将光标经过的地方反白选择 y将反白的地方复制 d将反白的地方删除
字符串替换
语法:[addr]s/源字符串/目的字符串/option
option(g表示全局替换,c表示替换前进行确认)
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
全局替换,:%s/源字符串/目的字符串/g
从当前行到文件尾替换,:.,$%s/源字符串/目的字符串/g
从第n行到文件尾替换,:n,$%s/源字符串/目的字符串/g
vim的快捷键
% 跳转到配对的括号去 [[ 跳转到当前或者上一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行) ][ 跳转到当前代码块(函数定义、类定义等)的结尾去(但要求代码块中'{'必须单独占一行) ]] 跳转到下一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行)
gd到局部变量的定义,gD到全局变量的定义
‘’ 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
x 跳转到书签处("
"是1左边的键)
缩进
插入模式 Ctrl-T增加缩进,Ctrl-D减小缩进。
命令模式
右缩进, << 左缩进,注意n<< 或 n>>是缩进多行,如4>>
可视模式 < 、 > 用于左右缩进, n< 、 n> 可做多节缩进,如 2> 。 另外,= 可对选中的部分进行自动缩进;]p可以实现p的粘贴功能,并自动缩进。
打开文件列表窗口快捷键netrw.vim <F1> 显示帮助 <cr> 如果光标下是目录, 则进入该目录; 如果光标下文件,则打开该文件
返回上级目录 c 切换vim当前工作目录正在浏览的目录 d 创建目录 D 删除目录或文件 i 切换显示方式 R 文件或目录重命名 s 选择排序方式 x 定制浏览方式,使用你指定的程序打开该文件
附录
ctags 对shell语言的支持 vim+ctags+cscope安装与使用总结(不断补充中) vim 中Ctags的安装和使用 vim+cscope+ctags打造属于自己的IDE 一份比较好用的vim配置文件 Vim的强大配置文件(一键配置) ctags实践总结 ctags使用方法 ctags的使用方法 Exuberant Ctags中文手册 超详细的vim+cscope 的使用规则 VIM 的 modeline 和 autocmd Ubuntu 16.04 下 Vim安装及配置 vim源码阅读工具 ctags cscope 和 Source Insight