vim-百度百科

vim命令-博客园html

http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.htmljava


VIM

(Unix及类Unix系统文本编辑器)

编辑
Vim是一个相似于 Vi的著名的功能强大、高度可定制的 文本编辑器,在Vi的基础上改进和增长了不少特性。 [1]  VIM是纯粹的 自由软件
Vim广泛被推崇为类 Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不一样变体。1999 年 Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳 开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs一样都是很是优秀的文本编辑器。 [1]  
外文名
VIM
类    别
文本编辑器
应用范围
计算机
功    能
代码编写
名称含义
Vi iMproved

发展历程

编辑
Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被普遍使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。 [2]  
使用vim先知道其设计理念是很重要的,有助于记忆,触类旁通。
1.vim的设计理念是组合;
命令组合:
Vim强大的编辑能力中很大部分是来自于其普通模式命令。 vim的设计理念是命令的组合。例如普通模式命令"dd"删除当前行,"dj"表明删除到下一行,原理是第一个"d"含义是删除,"j"键表明移动到下一行,组合后"dj"删除 当前行和下一行。另外还能够指定命令重复次数,"2dd"(重复"dd"两次),和"dj"的效果是同样的。"d^","^"表明行首,故组合后含义是删除到光标开始到行首间的内容(不包含光标);"d$" $"表明行尾,删除到行尾的内容(包含光标);用户学习了各类各样的文本间移动/跳转的命令和其余的普通模式的编辑命令,而且可以灵活组合使用的话,可以比那些没有模式的编辑器更加高效的进行文本编辑。
模式间的组合:
在普通模式中,有不少方法能够进入插入模式。比较普通的方式是按"a"(append/追加)键或者"i"(insert/插入)键。
2.不少快捷键设置和正则表达式相似,能够辅助记忆; ^ $ w 等
3. vim针对程序员作了优化;
写代码的时候手须要时刻保持在键盘上,随机定位代码、随机删除代码、移动代码、插入代码的操做大大多于阅读、翻页操做,中间卡顿一下效率就大大下降了;但对普通用户而言,顺序写、设置字体格式、翻页读多于随机写删除操做, 且每一个动做之间自己就有不少的停顿,用其余UI编辑器(word, notePad++等)效率反而比VIM高效,使用vim进行操做只会徒增你的疑惑: vim为何这么流行。(若是你不是一个代码开发者,估计你看完这段话也没法感同身受,建议先去学一门编程语言,新手推荐学C,java入门,作一道50行代码的课后习题,来感觉下写代码的过程)
Bram Moolenaar 在 80 年代末购入他的 Amiga计算机时,Amiga 上没有他最经常使用的 编辑器vi。Bram 从一个开源的 vi 复制 Stevie 开始,开发了 Vim 的 1.0 版本。最初的目标只是彻底复制 vi 的功能,那个时候的 Vim 是Vi IMitation(模拟)的简称。1991 年 Vim 1.14 版被 "Fred Fish Disk #591" ——Amiga 用的免费软体集收录了。1992 年 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS上。从那个时候开始,Vim 的全名就变成 Vi IMproved(改良)了。
在这以后,Vim 加入了不可胜数的新功能。作为第一个里程碑的是 1994 年的 3.0 版本加入了多视窗编辑模式(分割视窗)。从那以后,同一荧幕能够显示的 Vim 编辑文件数能够不止一个了。1996 年发布的 Vim 4.0 是第一个利用图型接口(GUI)的版本。1998 年 5.0 版本的 Vim 加入了 highlight( 语法高亮)功能。2001 年的 Vim 6.0 版本加入了代码折叠、 插件、多国语言支持、垂直分割视窗等功能。2006 年 5 月发布的 Vim 7.0 版更加入了拼字检查、上下文相关补完,标签页编辑等新功能。 2008 年 8 月发布的 Vim 7.2,该版本合并了 vim 7.1 以来的全部修正补丁,而且加入了脚本的浮点数支持,2010年08月15日,历时两年的时间,vim又发布了vim 7.3这个版本,这个版本修复了前面版本的一些bug,以及添加了一些新的特征,这个版本比前面几个版原本的要更加优秀。

主要功能

编辑
根据设定能够和原始vi彻底兼容
多缓冲编辑
任意个数的分割窗口(横,竖)
具有列表和字典功能的脚本语言
能够在脚本中调用 Perl, Ruby, Python, Tcl, MzScheme ,C,C++
单词缩写功能
动态单词补完
屡次撤销和重作
对应400种以上文本文件的语法高亮
Lisp,C/C++, Perl, Java, Ruby, Python 等40种以上语言的自动缩排
利用ctags的标签中跳转
崩溃后文件恢复
光标位置和打开的缓冲状态的保存 复原(session功能)
能够对两个文件进行差分,同步功能的diff模式
远程文件编辑 。 [2]  

学习方法

编辑
Vim已经有各主流系统的版本,尽管vim较vi已经改良了很多,可是初次使用仍是会一头雾水,不知如何操做,因此学习vim要首先过2关。第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每一个键都有固定的用法,且vim的制做者但愿用户在普通模式(也就是命令模式,只可输入命令)完成大部分的编辑工做,将此 模式设计为默认模式,初学者打开vim,若是直接输入单词,结果就会滴滴乱响,这是由于vim把用户输入的单词理解为命令了。第二关是命令关,vim有过百条命令对应编辑的须要,若是能熟练使用vim这些命令,编辑速度确实比鼠标要快不少,可是想全都记住它们也是一件难事,我想记住它们最好的方法就是多多来练习,确实把vim用在平常的文本编辑中去,且遇到难题不要放弃,而是查找解决的方法,每解决一个难题,你的vim技能就上升一级。
其实, Vim与其它 编辑器一个很大的区别在于, 它能够完成复杂的编辑与格式化功能. 在这些领域还少有软件能与它平起平坐, 可是, 与全部的灵活性的代价同样, 你须要用本身的双手来实现它. 这在事实上形成了用户在使用Vim过程当中的几个天然阶段。
一开始, Notepad, Visual Studio,Microsoft Word等垄断你的大脑, 这些东西根深蒂固, 挥之不去。Vim的使用对你而言是一场噩梦, 它下降而不是提升了你的工做效率. 对三种工做模式的不解甚至使你认为它是一个充满BUG或者至少是一个古怪的与当今友好 用户界面设计严重脱节的软件。 事实上, 这些起初看起来古怪的特性是Vim(或者是vi)的做者和它的用户们在本身漫长的文字编辑和程序设计生涯中总结出来的最快速最实在的操做, 在几乎等于计算机自己历史的成长期中, 历经无数严厉苛刻的计算机用户的批评与检验, 无用的特性或糟糕的设计在Vim用户群面前根本就没有生存的余地. Vim细心而谨慎的做者们也不容许本身精心设计的软件里有这样东西。
第二个阶段,你开始熟悉一些基本的操做, 这些操做足以应付你平常的工做, 你使用这些操做时根本就不假思索. 但这些阶段你仍然不多去碰Vim那晦涩的在线帮助文档. 它在你内心只是Notepad、Visual Studio的勉强合格的替代品。
第三个阶段, 精益求精的你不知足于无休无止的简单操做, 冗长而乏味,有没有更好的办法能够四两拔斤. 因而, 从UNIX参考手册上, 从同事口中, 你渐渐叩开:help xxx的大门. 开始探索里面充满魔力的咒语. 从杂耍般的带有表演性质的技巧开始, 这些技巧使人眩目但少有实用性. 不过这倒是你拥有魔力的第一步. 接下来, 你开始认识到这些咒语背后的真经, 开始偷偷修改一些奇怪的符号, 因而, 奇迹产生了, 魔力不但仍然有效, 并且真实地做用于你现实中的文字编辑生活. 你在第二阶段因为熟练操做而尘封已久的大脑忽然开始运做. 但这个过程并不是是达到某个临界状态后的一路坦途, 不断的挫折, 新的挑战, 看似Mission Impossible的任务永远伴随着任何一我的的任何一个学习过程. 这是你使用Vim的最后一个阶段, 也是最漫长最有挑战性同时也充满无数奇趣的阶段. 这个阶段里你开始定制一些希奇古怪的颜色. 开始以敲入i18n来输入internationalization, 开始让Vim替你纠正常常把the 误敲成teh的毛病, 开始让Vim与系统里各类精悍而强大的兄弟工具进行合做, 开始写愈来愈长的script, 每一次的文本编辑体验都妙不可言高潮迭起. 你的头脑由于要用Vim完成高效的编辑而高度紧张. 你开始在Vim邮件列表里提一些确实是问题的问题. 也开始发现你在Vim里作了之前在SHELL里作的几乎一切事. 事实上你已经成了一个无可救药的Vim骨灰级玩家。

高效率移动

编辑
一、在插入模式以外
基本上来讲,你应该尽量少的呆在插入模式里面,由于在插入模式里面 VIM 就像一个“哑吧” 编辑器同样。不少新手都会一直呆在插入模式里面,由于这样易于使用。但 VIM 的强大之处在于他的命令模式!你会发现,在你愈来愈了解 VIM 以后,你就会花愈来愈少的时间使用插入模式了。
二、使用 h、j、k、l
使用 VIM 高效率编辑的第一步,就是放弃使用 箭头键。使用 VIM,你就不用频繁的在箭头键和字母键之间移来移去了,这会节省你不少时间。当你在命令模式时,你能够用 h、j、k、l 来分别实现左、下、上、右箭头的功能。一开始可能须要适应一下,但一旦习惯这种方式,你就会发现这样操做的高效之处了。
在你编辑你的电子邮件或者其余有段落的文本时,你可能会发现使用方向键和你预期的效果不同,有时候可能会一次跳过了不少行。这是由于你的段落在 VIM 看来是一个大的长长的行。这时你能够在按 h、j、k 或者 l 以前键入一个 g,这样 VIM 就会按屏幕上面的行如你所愿的移动了。
三、在当前行里面有效的移动光标
不少 编辑器只提供了简单的命令来控制光标的移动(好比左、上、右、下、到行首/尾等)。VIM 则提供了不少强大的命令来知足你控制光标的欲望。当光标从一点移动到另一点,在这两点之间的文本(包括这两个点)称做被“跨过”,这里的命令也被称做是 motion。(简单说明一下,后面会用到这个重要的概念)
四、经常使用到的一些命令(motion)
fx:移动光标到当前行的下一个 x 处。很明显,x 能够是任意一个字母,并且你可使用 ; 来重复你的上一个 f 命令。
tx:和上面的命令相似,可是是移动到 x 的左边一个位置。(这真的颇有用)
Fx:和 fx 相似,不过是往回找。使用 , 来重复上一个F命令。
Tx:和 tx 相似,不过是往回移动到 x 的右边一个位置。
b: 光标往前移动一个词。
w:光标日后移动一个词。
0:移动光标到当前行首。(是数字0)
^:移动光标到当前行的第一个字母位置。
$:移动光标到行尾。
):移动光标到下一个句子。
( :移动光标到上一个句子。
五、在整个文件里面有效移动光标
VIM 有不少命令,能够用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令:
<Ctrl-f>:向下移动一屏。
<Ctrl-d>:向下移动半屏。
<Ctrl-b>:向上移动一屏。
<Ctrl-u>:向上移动半屏。 [3]  
G:到文件尾
numG:移动 光标到指定的行(num)。(好比 10G 就是到第 10 行)
gg:到文件首
H:移动光标到屏幕上面
M:移动光标到屏幕中间
L:移动光标到屏幕下面
*:读取光标处的字符串,而且移动光标到它再次出现的地方。
#:和上面的相似,可是是往反方向寻找。
/text:从当前 光标处开始搜索字符串 text,而且到达 text 出现的地方。必须使用回车来开始这个搜索命令。若是想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。
?text:和上面相似,可是是反方向。
m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它通常位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令颇有用,并且你不用本身去标记它。
%:在成对的括号等符号间移动,好比成对的 [ ] , { }, ( ) 之间。将 光标放到任意符号上,而后经过 % 来移动到和这个符号匹配的符号上,% 还能够正确的识别括号的嵌套层数,老是移动到真正匹配的位置上。所以这个命令在编辑程序代码的时候很是有用,可让你方便的在一段代码的头尾间移动。

高效的输入

编辑
一、使用关键词自动完成
VIM 有一个很是漂亮的关键词自动完成系统。这表示,你能够输入一个长词的一部分,而后按一下某个键,而后 VIM 就替你完成了这个长词的输入了。举个例子:你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的 某个地方。也许你不想每回都本身一个一个字母的去输入它。
使用关键词自动完成功能,你只须要输入开始几个字母(好比 iAmAL),而后按 <C-N>(按住 Ctrl,再按 N)或者 <C-P>。若是 VIM 没有给出你想要的词,继续按,直到你满意为止,VIM 会一直循环它找到的匹配的字符串。
二、聪明的进入插入模式
不少新手进入插入模式都只是用 i。这样固然能够进入插入模式,但一般不是那么合适,由于 VIM 提供了不少进入插入模式的命令。下面是最经常使用的一些:
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
c{motion}:删除 motion 命令跨过的 字符,而且进入插入模式。好比:c$,这将会删除从 光标位置到行尾的字符而且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),而后进入插入模式。被删除的字符被存在了剪贴板里面,而且能够再粘贴出来。
d{motion}:和上面差很少,可是不进入插入模式。
三、有效的移动大段的文本
使用可视选择(visual selections)和合适的选择模式
不像最初的 VI,VIM 容许你高亮(选择)一些文本,而且进行操做。这里有三种可视选择模式:
v:按 字符选择。常用的模式,因此亲自尝试一下它。
V:按行选择。这在你想拷贝或者移动不少行的文本的时候特别有用。
<C-V>:按块选择。很是强大,只在不多的 编辑器中才有这样的功能。你能够选择一个矩形块,而且在这个矩形里面的文本会被高亮。
在选择模式的时候使用上面所述的方向键和命令(motion)。好比,vwww,会高亮 光标前面的三个词。Vjj 将会高亮当前行以及下面两行。
四、在可视选择模式下剪切和拷贝
一旦你高亮了选区,你或许想进行一些操做:
d:剪贴选择的内容到剪贴板。
y:拷贝选择的内容到剪贴板。
c:剪贴选择的内容到剪贴板而且进入插入模式。
在非可视选择模式下剪切和拷贝
若是你很清楚的知道你想拷贝或者剪切什么,那你根本就不须要进入可视选择模式。这样也会节省时间:
d{motion}:剪切 motion 命令跨过的字符到剪贴板。好比,dw 会剪切一个词而 dfS 会将从当前 光标到下一个 S 之间的字符剪切至剪贴板。
y{motion}:和上面相似,不过是拷贝。
c{motion}:和 d{motion} 相似,不过最后进入插入模式。
dd:剪切当前行。
yy:拷贝当前行。
cc:剪切当前行而且进入插入模式。
D:剪切从光标位置到行尾到剪贴板。
Y:拷贝当前行。
C:和 D 相似,最后进入插入模式。
x:剪切当前字符到剪贴板。
s:和x相似,不过最后进入插入模式。
五、粘贴
粘贴很简单,按 p。
六、使用多重剪贴板
不少 编辑器都只提供了一个剪贴板。VIM 有不少。剪贴板在 VIM 里面被称为寄存器(Registers)。你能够列出当前定义的全部寄存器名和它们的内容,命令为“:reg”。最好使用小写字母来做为寄存器的名称,由于大写的有些被 VIM 占用了。
使用 寄存器的命令为双引号 “。
好比:咱们要拷贝当前行到寄存器 k。你应该按 “kyy。(你也可使用 V”ky。为何这样也能够呢?)如今当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。你可使用命令 “kp 来粘贴寄存器 k 里面的内容到你想要的位置。
七、避免重复
使人惊奇的 . 命令
在 VI 里面,输入 . (小数点符号),将会重复你输入的上一个命令。好比,你上个命令为“dw”(删除一个词),VI 将会接着再删除一个词。
八、使用数字
使用数字也是 VIM 强大的并且很节省时间的重要特性之一。在不少 VIM 的命令以前均可以使用一个数字,这个数字将会告诉 VIM 这个命令须要执行几回。好比:
3j 将会把 光标向下移动三行。
10dd 将会删除十行。
y3t″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。
数字是扩展 motion 命令做用域很是有效的方法。

高效读代码

编辑
建议在vim上安装Taglist+cscope+c tags 插件有利于高效读代码,有利于学习! [4]  
一、安装
对于小编我来讲我使用的是Ubuntu,安装软件通常使用的命令是apt-get install ***!
对于vim+Taglist+cscope+ctags组合 编辑器的建立,vim , cscope , ctags安装起来比较方便使用上述命令便可安装!
(对于不一样的Linux发行版本安装软件的命令不太同样,须要根据本身的安装版稍微修改,好比说Fedora即便用yum命令安装)
对于Taglist使用这个方法安装不了,咱们须要先下载,而后安装完成:
首先上网下载Taglist插件,下载完成后解压,再将文件下的taglist.vim使用cp命令拷贝到HOME/.vim/plugin文件夹下(cp -r taglist.vim ~/.vim/plugin)
二、vim的配置
vim是一个很是好用的编辑工具,如下介绍几个经常使用的底行模式命令:
(1). 设置缩进
:set smartindent // 设置缩进
:set smartindent shiftwidth=4 // C语言自动缩进,缩进值为4个字符宽度
(2). 显示光标行列信息
:set ruler // 显示光标信息(右下角)
(3). 查看制表符
:set list // 显示制表符,以^符号显示制表符的位置
(4). 查看行数信息
:set number //显示行号(左边)
(5). 关键字高亮
:syntax on //关键字高亮
(6). 多文件编辑 ,在编写程序时有可能须要同时编辑多个文件,在这种状况下,须要以下设置
: split two.c // 多文件编辑
固然,若是不嫌麻烦,能够在每次打开Vim时 输入如上命令,如我常常用的是:set number :set ruler :syntax on :set smartindent 命令,若是将平时在底行模式下输入的命令直接写入配置文件,则之后使用Vim时不用再次输入这些命令。
首先,试着在Vi的底行模式下输入以下命令,若是不支持的话,去下载一个Vim的全版本,sudo apt-get install vim-full。
如下是修改配置文件的方法:
(1). 找到Vimrc文件。
(2) 查看文件的权限:
ls -l vimrc
shisir@shisir-desktop:/usr/share/vim$ cd /etc/vim
shisir@shisir-desktop:/etc/vim$ ls
gvimrc vimrc vimrc.tiny
shisir@shisir-desktop:/etc/vim$ ls -l vimrc
-r--r--r-- 1 root root 2492 2009-04-10 08:08 vimrc
(3) 若是没有写权限的话,修改权限,使咱们能够修改该配置文件
sudo chmod a+w vimrc
(4)根据我的须要将上述命令写入配置文件
好比,我我的的设置是: syntax on , set ruler ,set number , set smartindent shiftwidth=4
下面贴上个人vimrc文件的配置信息:
"显示行号
set number
"检测文件的类型
filetype on
"记录历史的行数
set history=1000
"自动对齐
set autoindent
set cindent
"智能选择对齐方式
set smartindent
"tab为4个空格
set tabstop=4
"当前行之间交错时使用4个空格
set shiftwidth=4
"设置匹配模式,输入左括号会出现右括号
set showmatch
"编辑时显示光标状态
set ruler
"快速匹配
set incsearch
"修改文件自动备份
if has("vms")
set nobackup
else
set backup
endif
"""""""""""""设置开启ctags"""""""""""""
set tags=/home/zhouyl/linux-3.4.7/tags;"这边设置的是你使用ctags -R的目录,后面有介绍!你根据本身的使用修改这个路径
set autochdir
"""""""""""""""""Taglist设置"""""""""""""""""
""let Tlist_Auto_Open = 1
let Tlist_C tags_Cmd = '/usr/bin/ctags'
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
""""""""""""""""""""""cscope设置""""""""""""""""""
set cscopequickfix=s-,c-,d-,i-,t-,e-
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif
由于个人文档中的原配置文件已经有了语法高亮:
" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
if has("syntax")
syntax on
endif
因此我就没写了,您若是vimrc文件里面没有此项建议本身加上syntax on 设置语法高亮
PS:在配置文件中"符号后的内容是注释,并且在配置文件中是不须要添加符号的 ,这里关于cscope、c tags和Taglist的设置能够先写上,后面将对这三个 插件有介绍。好了,去开一个Vim,编辑一个程序看看,是否是感受很不通常呢?
好了,下面顺便演示下,智能补全的用法,我分四种状况:一、前面申明过的变量或者函数名的补全;二、结构体等自建结构的补全;三、STL等标准库的补全;四、括号、引号等自动匹配补全。
对于第一种状况,写程序的过程当中,直接用CTRL+p便可选择,对于第二种状况,若是想申明告终构体T,想在输入T.时弹出成员供选择,只需在用以前按一下:CTRL+F12,而后效果如图:
三、Taglist插件的使用
TagList 插件,是一款基于c tags,在vim代码窗口旁以分割窗口形式(如上图所示)显示当前的代码结构概览,增长代码浏览的便利程度的vim插件.
在Vim中加载代码文件后,可使用如下命令控制taglist
:TlistOpen 打开并将输入焦点至于标签列表窗口,效果如上图所示
:TlistClose 关闭标签列表窗口
:TlistToggle 切换标签列表窗口状态(打开←→关闭),标签列表窗口是否得到焦点取决于其余配置
ctl-w + w 或ctl-w + 方向键 窗口切换(taglist本质上是一个vim分隔窗口,所以可使用ctl-w系列快捷键对窗口进行切换操做)
在Taglist窗口主要有如下操做
按F1:打开帮助
回车键:跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)
o:新建一个窗口,跳到标记定义处
p:预览标记定义(仍然在taglist窗口)
空格:显示标记的原型(如函数原型)
u:更新标记列表(好比源文件新增了一个函数,并在保存后,可在taglist窗口按u)
s:选择排序字段(暂时我也不知道什么意思)
d:删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c能够删除f1.c的标记)
x:n放大/缩小taglist窗口
+:展开(指标记)
-:折叠
*:所有展开
=:所有折叠
[[:将光标移到前一个文件的起点
]]:将光标移到后一个文件的起点
q:退出taglist窗口
F1:关闭帮助
四、ctags插件的使用
VIM简单易用,你们只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法,上面也简单介绍了点vim的用法。可是对于Linux下的C/C++的 程序员,使用VIM+C tags的组合来写程序也许是最佳的选择。^_^
尽管ctags也能够支持其它 编辑器,可是它正式支持的只有VIM。而且VIM中已经默认安装了Ctags,它能够帮助程序员很容易地浏览源代码。
熟练的使用ctags仅需记住下面七条命令:(很简单吧,呵呵)
1. $ ctags–R * ($ 为Linux系统Shell提示符)
2. $ vi –t tag (请把tag替换为您欲查找的变量或函数名)
3. :ts (ts 助记字: tagslist, “:”开头的命令为VI中命令行模式命令)
4. :tp (tp 助记字:tagspreview)---此命令不经常使用,能够不用记
5. :tn (tn 助记字:tagsnext) ---此命令不经常使用,能够不用记
6. Ctrl + ] 跳到光标所在函数或者结构体的定义处
7. Ctrl + T 返回查找或跳转
下面咱们逐条的解释上面的命令:
“$ ctags–R *”:“-R”表示递归建立,也就包括源代码根目录(当前目录)下的全部子目录。“*”表示全部文件。这条命令会在当前目录下产生一个“ tags”文件, 当用户在当前目录中运行vi时,会自动载入此tags文件。Tags文件中包括这些对象的列表:
用#define定义的宏
枚举型变量的值
函数的定义、原型和声明
名字空间(namespace)
类型定义(typedefs)
变量(包括定义和声明)
类(class)、结构(struct)、枚举类型(enum)和联合(union)
类、结构和联合中成员变量或函数
VIM用这个“ tags”文件来定位上面这些作了标记的对象。
剩下的命令就是定位这些对象的方法:
“$ vi –t tag” :在运行vim的时候加上“-t”参数,例如:
[/usr/src]$ vim -t main
这个命令将打开定义“main”(变量或函数或其它)的文件,并把光标定位到这一行。若是这个变量或函数有多处定义,在VI命令行模式“:ts”命令就能 列出一个列表供用户选择。 “:tp”为上一个tag标记文件,“:tn”为下一个tag标记文件。固然,若当前tags文件中用户所查找的变量或函数名只有一 个,“:tp,:tn”命令不可用。 :(
最方便的方法是把光标移到变量名或函数名上,而后按下“ Ctrl+] ”,这样就能直接跳到这个变量或函数定义的源文件中,并把光标定位到这一行。用 “ Ctrl+T ”能够退回原来的地方。即便用户使用了N次“Ctrl+]”查找了N个变量,按N次“Ctrl+t”也能回到最初打开的文件,它会按原路返 回 。 ^_^
注意:运行vim的时候,必须在“ tags”文件所在的目录下运行。不然,运行vim的时候还要用“:settags=”命令设定“tags”文件的路 径,这样vim才能找到“tags”文件。在完成编码时,能够手工删掉tags文件(帚把不到,灰尘不会本身跑掉^_^)。
五、cscope插件的使用
Cscope是一个相似 ctags的工具。 你能够把它想做是超过频的 ctags,由于它功能比ctags 强大不少。 在 Vim 里,经过 cscope 查询结果来跳转就象跳转到其余的标签彻底同样;它被保存在标签栈里。这样你就能够象使用 c tags同样在函数等等之间便捷的跳转 [5]  
在VIM中使用cscope很是简单,首先调用“cscope add”命令添加一个cscope数据库,而后就能够调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,以下:例如,咱们想在代码中查找调用work()函数的函数,咱们能够输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并无函数调用work()。咱们再输入“:cs find s work”,查找这个符号出现的位置,vim列出了这个符号出现的全部位置。咱们还能够进行字符串查找,它会双引号或单引号括起来的内容中查找。还能够输入一个正则表达式,这相似于egrep程序的功能。
在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.在vim命令行下执行:(按照上述方法配置好的vimrc中有这一步)
:cs add cscope.out
在vim命令行下执行:
:cs help
cscope commands:
add : Add a new database (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)
c: Find functions calling this function //查找调用本函数的函数
d: Find functions called by this function //查找本函数调用的函数
e: Find this egrep pattern //查找egrep模式,至关于egrep功能,但查找速度快多了
f: Find this file //查找并打开文件,相似vim的find功能
g: Find this definition //查找函数、宏、枚举等定义的位置,相似c tags的功能
i: Find files #including this file //查找包含本文件的文件
s: Find this C symbol //查找C语言符号,即查找函数名、宏、枚举值等出现的地方
t: Find assignments to //查找指定的字符串
help : Show this message (Usage: help)
VIM命令 VIM命令
kill : Kill a connection (Usage: kill #)
reset: Reinit all connections (Usage: reset)
show : Show connections (Usage: show)
例如:使用cscope查找do_fork函数的定义:
在vim命令行下执行: :cs f g do_fork