精通vim--提高效率

< type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length > 300) { text = text + "\r\n\n本文来自CSDN博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } }

在vim下可以使用常用的箭头键
但是 还有其它键可以让你更快的达到目标

hjkl 这是代替箭头键功能的
H M L 跳到屏幕的顶上 中间 下方

w 跳到下一个单词的开始
e 跳到单词的结束
b 向后跳

gg 跳到文件的开始
G 跳到文件的结束
10gg 或10G 跳到第10行


ta 跳到下一个a 前面
fa 跳到下一个a
大写的意思相反



另外还有%(跳到文件的%多少) 和|(跳到第几列) 不过我很少用


上面的都可以加上数字前缀 表示第几个匹配


另外看文件时 除了pageup pagedown外还有其它的快速键
如CTRL-F 向前一页 CTRL-B 向后一页

上面不是重要的
CTRL-D 向下半页 CTRL-U 向上半页我觉得更实用 这样看文章时就不会跳转出错
另外还有
CTRL-E 向下一行
CTRL-Y 向上一行


^ 行首
$行尾
0 第一个字符


另外上面也作为vim其它命令的定位符 如删除d

dt)
一直删除到这行的)

另外 懂了跳转键后 那删除或是复制时就不再是以行为单位了 可以指定到某个条件
我觉得这是新手成长的必要方法


另外还有ctrl-t ctrl-i ctrl-]

如果已经使用了ctags 或是cscope创建索引文件的话 那看代码时很是方便

跳转到函数、变量定义处:
[+ctrl+i 跳转到函数、变量和#define
[+ctrl+d 跳转到#define处
ctrl+i 向前跳到前几次光标位置
ctrl+o 向后跳到后几次光标位置

函数体跳转:
[[
]]
[]
][
{}

2009-07-07 17:31 补充

如何选中括号中的内容 进行:
将光标移至括号内,按shift+v进入行选模式,然后

i{ - 选小括号中内容,不包括小括号
a{ - 选小括号中内容,包括小括号
ib - 选中括号中内容,不包括括号
ab - 选中括号中内容,包括括号
i{ - 选大括号中内容,不包括大括号
a{ - 选大括号中内容,包括大括号

:h text-objects

下面还有些相关的tips,未全部验证:
vi{ 选中{}中间的内容,不包括{}
va{ 选中{}中间内容,包括{}
vi( 选中()中间内容
vi< 选中<>中间内容
vi[ 选中[]中间内容
vit 选中中间的内容
vi” 选中”"中间内容
vi’ 选中”中间的内容
vis 选中一个句子
vib 选中一个block
viw选中一个单词
vip 选中一个段落

在normal模式下光标停在某个字符上ga可以查看该字符的ascii码
#复制删除粘贴的操作:按V(shift+v),进入可视模式,jk上下选择需要的行,然后按
y 复制
d 删除
x 剪切
p 粘贴
可视模式很好用,例如想把两行的所有单词变成小写,按V然后按j或k选中这两行,按gu即可
#跳到行首按0,但实际更好用的是^, 跳到行首非空白字符
#折行前空出4字符显示折行标识
set foldcolumn=4
#折叠或展开(在折叠的那一行左右移动光标也可展开折叠)
za
#删除光标所在行所处的范围的折叠
zd
#当在:set foldmethod=marker后,折行会把{{{和}}}之间的内容折叠
#不在单词中间断行。 设置了这个选项后, 如果一行文字非常长, 无法在一行内显示完的话,
它会在单词与单词间的空白处断开, 尽量不会把一个单词分成两截放在两个不同的行里。
set lbr
#sw是shiftwidth的缩写,表缩进列数
fx把光标移动到该行的下个x字符上,这个x也可以是一个汉字,;重复fx操作。Fx把光标移动到该行的上一个x字符上。
gg光标定位到第一行开头,G定位到最后一行开头
H光标跳到当前窗口显示文本的第一行
M光标跳到当前窗口显示文本的中间一行
L光标跳到当前窗口显示文本的最后一行
g*查找包含当前单词的所有单词(*只查找与当前单词精确匹配的单词),
-d光标下跳半屏,文本上滚半屏
-u光标上跳半屏,文本下滚半屏
-e文本向上滚动一行
zz屏幕滚动使得当前行成为屏幕的中间一行
normal模式下按J删除此行末尾的换行符,从而合并两行
:e!重新读进上次保存的此文件内容
:ab myname william_djj
以后再编辑时键入myname,然后空格或回车myname串就会被william_djj代替
:r !date
在当前位置插入系统时间(linux下的date命令),同理当前位置插入某文件的内容就是
:r filename
:set ignorecase
查找时取消case sensitive
:set noignorecase
查找时case sensitive
############ 使用tags ###################
以下命令递归当前目录下的所有文件创建tags文件
ctags -R .
vim打开当前目录下的任意一文件,命令模式下键入下面语句以指定刚才创建的tags的位置,以后就可以在不同文件间查阅函数
set tags=..\tags
#分割窗口显示当前函数的定义
-w ]
##########################################
如果插件目录下有echofunc.vim,用以下命令生成tags,以后编辑代码函数名后打“(“时有参数提示。
$ ctags -R –fields=+lS .
:Tlist打开左边一个taglist的窗口,显示symbols。要注意的是在windows下如果tags文件路径中有空格或中文会报找不到tags文件的错误,
+w+w 或者+w+left/right 窗口切换
+] 进入光标所指的symbol的定义(如果用鼠标也是+鼠标左键,跟SI的用法一样)
+t 返回第一个用+t 跳转位置,注意+o是跳回上一个视图,而+t是跳回上一次按+]的位置
#以下命令分裂出一个窗口显示定义处
ptag 函数名
#以下命令关闭刚才打开的分裂窗口
pclose

#垂直分裂窗口打开一文件
vsplit 文件名

#水平分裂窗口打开一文件
split 文件名
变量名写成\name表示匹配模式
停在某个括号上按%,跳到匹配的括号处,#if跳到匹配的#else或#endif处
set fdm=syntax折叠函数体
双击]往后逐个函数跳读,双击[往前逐个函数跳读

#解决乱码
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

#在vim下对比两个文件,原来打开了fnpro.c,现在和fnpro.c.bak对比

#垂直分割
:vert diffsplit fnpro.c.bak

#水平分割
:diffsplit fnpro.c.bak

#跳到下一个不同之处
:]c

#跳到上一个不同之处
:[c

#展开折叠:zo

#折叠:zc

#不论何种情况下-o都可以上一次跳转的地方

#查看变量和函数的申明
[i

#以下为查看vim环境参数makeprg的值的例子:
:set makeprg?

#重新对文件代码进行缩进
gg=G

跳转函数、变量定义处:
[+ctrl+i 跳转函数、变量和#define
[+ctrl+d 跳转到#define处
ctrl+i 向前到前几次光标位置
ctrl+o 向后到后几次光标位置

函数跳转
[[
]]
[]
][
{}

2009-07-07 17:31 补充

如何选中括号中的内容 进行:
将光标移至括号内,按shift+v进入行选模式,然后

i{ - 选小括号中内容,不包括小括号
a{ - 选小括号中内容,包括小括号
ib - 选中括号中内容,不包括括号
ab - 选中括号中内容,包括括号
i{ - 选大括号中内容,不包括大括号
a{ - 选大括号中内容,包括大括号

:h text-objects

下面还有些相关的tips,未全部验证:
vi{ 选中{}中间的内容,不包括{}
va{ 选中{}中间内容,包括{}
vi( 选中()中间内容
vi< 选中<>中间内容
vi[ 选中[]中间内容
vit 选中中间的内容
vi” 选中”"中间内容
vi’ 选中”中间的内容
vis 选中一个句子
vib 选中一个block
viw选中一个单词
vip 选中一个段落

vim文件跳转

如果使用vim打开了多个文件,如vim file1 file2 ... fileN
可以通过
:n 或 :prev来跳转到前一个或者后一个文件
还可以通过
:first或:last来跳转到第一个和最后一个文件

如果你只打开一个文件,如vim file1
然后在使用过程中,通过
:e file2编辑了第二个文件,这时, :prev是不起作用的
可以用
:e#返回上一个编辑的文件

无论哪两种方式都可以用
:bN跳转到打开的第N个文件
如:b1跳转到第一个打开的文件

posted @ 2010-04-01 08:44 Kevin Bing 阅读(1666) 评论(0) 编辑

强烈建议VIM的初学者,主要是害怕读英文Help文件的朋友阅读!翻译的非常好,在此感谢译者ZhaoRuFei。
    vimdoc项目的主页在:
http://vimcdoc.sourceforge.net/
,有时间可以去看看
vim主页:
http://www.vim.org/
    这个网站不用介绍了吧。
7个有效的文本编辑习惯:Bram Moolenaar在google的演讲
 视频:
http://video.google.com/videoplay?docid=2538831956647446078
  或:
ftp://ftp.vim.org/pub/vim/MIRRORS
 演讲稿:
http://www.moolenaar.net/habits_2007.pdf
vim资源收集:
(点击此处)

    linux forum上的一个网友收集的vim资源,相当不错。
vim webring:
http://u.webring.com/hub?ring=vim
 这里收集了许多VIM相关的站点。全英文。
cscope主页:
http://cscope.sourceforge.net
    cscope的主页,程序员的利器。
 cscope与vim入门:
The Vim/Cscope tutorial
 使用cscope管理大软件项目:
Using Cscope on large projects (example: the Linux kernel)
vim实用技术:





    IBM developerWork上的文章,初学者可以一看。
vim group:
http://groups.google.com/group/Vim-cn/
    google上的vim group,不过人气还不是很旺。
水木清华VIM版:
http://www.newsmth.net/bbsdoc.php?board=VIM
 新水木的VIM版,常有牛人光临
clewn项目:
http://clewn.sourceforge.net/
 clewn支持在vim中使用GDB进行调试。
一个强大的vimrc:
http://www.amix.dk/vim/vimrc.html
 通读一遍,会学到很多东西。
 这里是redguardtoo改过的版本:
http://blog.csdn.net/redguardtoo/archive/2006/09/03/1172136.aspx

--------------------------------------------------------------------------------------------------------------------------------------

1.vim的老家
http://vim.sf.net 或者 www.vim.org ,这里有很多vim的tips和scripts,看看吧,总有一些适合你的

2.vim的中文文档
http://vimcdoc.sourceforge.net/ ,这里有pdf格式下载,可以下载了慢慢看.是本好书,翻译的也不错,如果有纸版的,我第一个去买.
pdf下载地址: http://vimcdoc.sourceforge.net/vim_user_manual_603.0.pdf

3.Best of Vim Tips
http://www.rayninfo.co.uk/vimtips.html
在你询问某个技巧之前,先看看这篇Best of Vim Tips,很有可能你就找到答案了.作者搜集整理了大量的vim技巧, 15 Years of Vi + 3 years of Vim and still learning ,作者这么说.
那我们呢?vim的学习是无止境的,学的越多,你的效率就越高

4.VIM Quick Reference Card
这个对于新手很有用,也许刚开始你记不住那么多vim的快捷键,没关系,打印一张卡片放在手边,忘记了可以看看.
http://tnerual.eriogerg.free.fr/vim.html ,这里有pdf, dvi 和tex格式的供下载


5.vim 新手指南
vimtutor: vim内置的快速指南,强烈建议新手先看看这个交互式的入门教程
执行方法: vimtutor, 如果是windows,在vim的安装目录下也有一个vimtutor.bat文件

6.http://www.vi-improved.org/
这里有给新手的一些建议,还有vimrc和gvimrc的实例,稍作修改就可以为己所用.

7.Vim Cookbook
http://www.oualline.com/vim-cook.html
这里也有一些技巧可以学习
8. VIM Reference Card
这里的参考页面作的不错,需要什么可以来这里查找
http://www.linux.ie/articles/tutorials/vim-3.0.refcard.html

9.如果需要用vim编辑XML,看看这里的文章 Vim as XML Editor
http://www.pinkjuice.com/howto/vimxml/index.xml

10.如果需要用vim编辑LaTex,看看这里
http://vim-latex.sourceforge.net/

11.如果你需要vim也能像source insight一样的代码自动完成,可是试试这个: Vim Intellisense
http://insenvim.sourceforge.net/
它支持c++,c#,java,JSP,xml,html 和SQL种语言,依赖perl .缺点是仅仅支持windows平台

12. Vim 的杯子
http://www.cafepress.com/vimrefmug.25635024
你没有看错,是vim的杯子!上面印着Vim Reference ,不过一个需要$10.99,看清楚,是美元

posted @ 2010-04-01 08:29 Kevin Bing 阅读(36) 评论(0) 编辑

注:以下资源来源于网络

熟练的使用ctags仅需记住下面七条命令:
1.$ ctags –R *   ($ 为Linux系统Shell提示符)
2. $ vi –t tag    (请把tag替换为您欲查找的变量或函数名)
3. :ts          (ts 助记字:tags list, “:”开头的命令为VI中命令行模式命令)
4. :tp          (tp 助记字:tags preview)---此命令不常用,可以不用记
5. :tn          (tn 助记字:tags next) ---此命令不常用,可以不用记
6. Ctrl + ]
7. Ctrl + o
注意:运行vim的时候,必须在“tags”文件所在的目录下运行。否则,运行vim的时候还要用“:settags=”命令设定“tags”文件的路径,这样vim才能找到“tags”文件。在完成编码时,可以手工删掉tags文件。

在.vimrc中加入
" -- ctags --
" map <ctrl>+F12 to generate ctags for current folder:
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>
" add current directory's generated tags file to available tags
set tags+=./tags
之后,进入vim后<ctrl>+F12就会自动生成当前目录和子目录的tags

:Tlist      打开tag管理列表


:WMToggle打开winmanager
:e 目录     打开目录

    "ctags"是一个独立的程序,绝大多数Unix系统上都会预装这个程序。
1、使用tags
    tag是什么?一个位置。它记录了关于一个标识符在哪里被定义的信息,比如C或C++程序中的一个函数定义。这种tag聚集在一起被放入一个tags文件。这个文件可以让Vim能够从任何位置起跳达到tag所指示的位置-标识符被定义的位置。
    下面的命令可以为当前目录下的所有C程序文件生成对应的tags文件:(shell command) ctags *.c
    现在你在Vim中要跳到一个函数的定义(如startlist)就可以用下面的命令:(ex command) :tag startlist,这个命令会带你到函数"startlist"的定义处,哪怕它是在另一个文件中。
    CTRL+] 命令会取当前光标下的word作为tag的名字并直接跳转。这使得在大量C程序中进行探索更容易一些。 假设你正看函数"write block",发现它调用了一个叫"write line"的函数,这个函数是干什么的呢?你可以把光标置于"write_line"上,按下CTRL+] 即可。
如果"write_line"函数又调用了"write_char".你当然又要知道这个函数又是什么功能。 同时,置光标于"write_char"上按下CTRL+]。现在你位于函数"write_char"的定义处。
":tags"命令会列出现在你就已经到过哪些tag了:(ex command)
:tags
#      TO          tag       FROM line          in file/text
1       1       write_line              8             write_block.c
2       1       write_char             7             write_line.c
现在往回走。CTRL+T命令会跳到你前一次的tag处。在上例中它会带你到调用了"write_char"的"write_line"函数的地方。CTRL+T可以带一个命令记数, 以此作为往回跳的次数, 你已经向前跳过了,现在正在往回跳,我们再往前跳一次。下面的命令可以直接跳转到当前tag序列的最后:(ex command) :tag。你也可以给它一个前辍, 让它向前跳指定的步长. 比如":3tag"。CTRL+T也可以带一个前辍。
这些命令可以让你向下深入一个函数调用树(使用CTRL+]), 也可以回溯跳转(使用CTRL+T). 还可以随时用":tags"看你当前的跳转历史记录。
2、分隔窗口
    ":tag"命令会在当前窗口中载入包含了目标函数定义的文件。但假设你不仅要查看新的函数定义,还要同时保留当前的上下文呢?你可以在":tag"后使用一个分隔窗口命令":split"。Vim还有一个一举两得的命令:(ex command) :stag tagname。要分隔当前窗口并跳转到光标下的tag:(normal mode command) CTRL+W+]。如果同时还指定了一个命令记数, 它会被当作新开窗口的行高.
3、多个tags文件
    如果你的源文件位于多个目录下,你可以为每个目录都建一个tags文件。Vim会在使用某个目录下的tags文件进行跳转时只在那个目录下跳转。
    要使用更多tags文件,可以通过改变'tags'选项的设置来引入更多的tags文件。如:(ex command) :set tags=./tags, ./../tags, ./*/tags。这样的设置使Vim可以使用当前目录下的tags文件,上一级目录下的tags文件,以及当前目录下所有层级的子目录下的tags文件。这样可能会引入很多的tags文件,但还有可能不敷其用。比如说你正在编辑"~/proj/src"下的一个文件,但又想使用"~/proj/sub/tags"作为 tags文件。对这种Vim情况提供了一种深度搜索目录的形式。如下:(ex command) :set tags=~/proj/**/tags
4、单个tags文件
    Vim在搜索众多的tags文件时,你可能会听到你的硬盘在咔嗒咔嗒拼命地叫。显然这会降低速度。如果这样还不如花点时间生成一个大一点的tags文件。这需要一个功能丰富的ctags程序,比如上面提到的那个。它有一个参数可以搜索整个目录树:(shell command)
cd ~/proj
ctags -R
    用一个功能更强的ctags的好处是它能处理多种类型的文件。不光是C和C++源程序,也能对付Eiffel或者是Vim脚本。你可以参考ctags程序的文件调整自己的需要。
现在你只要告诉Vim你那一个tags文件在哪就行了:(ex command) :set tags=~/proj/tags
5、同名tag
    当一个函数被多次重载(或者几个类里都定义了一些同名的函数),":tag"命令会跳转到第一个符合条件的。如果当前文件中就有一个匹配的,那又会优先使用它。当然还得有办法跳转到其它符合条件的tag去:(ex command) :tnext重复使用这个命令可以发现其余的同名tag。如果实在太多,还可以用下面的命令从中直接选取一个:(ex command) :tselect tagname,Vim会提供给你一个选择列表,例如:(Display)
#     pri     kind     tag               file
1      F        f      mch_init     os_amiga.c
                           mch_init()
2      F        f      mch_init     os_mac.c
                           mch_init()
3      F        f      mch_init     os_msdos.c
                           mch_init(void)
4      F        f      mch_init     os_riscos.c
                           mch_init()
Enter nr of choice (<CR> to abort):
现在你只需键入相应的数字(位于第一栏的)。 其它栏中的信息是为了帮你作出决策的。在多个匹配的tag之间移动,可以使用下面这些命令:(ex command)
:tfirst     go to first match
:[count]tprevious   go to [count] previous match
:[count]tnext   go to [count] next match
:tlast    go to last match
如果没有指定[count],默认是1。
6、tag的名字
    命令补齐真是避免键入一个长tag名的好办法。只要输入开头的几个字符然后按下制表符:(ex command) :tag write_<Tab>。Vim 会为你补全第一个符合的tag名。如果还不合你意,接着按制表符直到找到你要的。有时候你只记得一个tag名的片段。或者有几个tag开头相同。这里你可以用一个模式匹配来告诉Vim你要找的tag。假设你想跳转到一个包含"block"的tag。首先键入命令:(ex command) :tag /block。现在使用命令补齐:按<Tab>。Vim会找到所有包含"block"的tag并先提供给你第一个符合的。"/"告诉Vim下面的名字不是一五一十的tag名,而是一个搜索模式。通常的搜索技巧都可以用在这里。比如你有一个tag以"write "开始:(ex command) :tselect / ^write_。"^"表示这个tag以"write_"开始。不然在半中间出现write的tag也会被搜索到。同样"$"可以用于告诉Vim要查找的tag如何结束。
7、tags的浏览器
    CTRL+]可以直接跳转到以当前光标下的word为tag名的地方去,所以可以在一个tag列表中使用它。下面是一个例子。首先建立一个标识符的列表(这需要一个好的ctags):(shell command)
ctags --c-types=f -f functions *.c
    现在直接启动Vim, 以一个垂直分隔窗口的编辑命令打开生成的文件:(shell command)
vim
:vsplit functions
    这个窗口中包含所有函数名的列表。可能会有很多内容,但是你可以暂时忽略它。用一个":setlocal ts=99"命令清理一下显示。在该窗口中,定义这样的一个映射:(ex command)
:nnoremap <buffer> <CR> 0ye<C-W>w:tag <C-R>"<CR>
    现在把光标移到你想要查看其定义的函数名上,按下回车键,Vim就会在另一个窗口中打开相应的文件并定位到到该函数的定义上。
8、其它相关主题
    设置'ignorecase'也可以让tag名的处理忽略掉大小写。'tagsearch'选项告诉Vim当前参考的tags文件是否是排序过的。默认情况假设该文件是排序过的,这会使tag的搜索快一些,但如果tag文件实际上没有排序就会在搜索时漏掉一些tag。'taglength'告诉Vim一个tag名字中有效部分的字符个数。
例:
#include <stdio.h>
int very_long_variable_1;
int very_long_variable_2;
int very_long_variable_3;
int very_long_variable_4;
int main()
{
    very_long_variable_4 = very_long_variable_1 *
    very_long_variable_2;
}
对于上面这段代码, 4个变量长度都为20, 如果将'taglength'设为10, 则:(ex command)
:tag very_long_variable_4
会匹配到4个tag,而不是1个,光标停留在very_long_variable_1所在行上,因为被搜索的tag部分只有前面的10个字符: "very_long_",相应的显示是(是gvim中文版的真正显示,不是翻译的):(Display)
找到tag: 1/4 或更多
转自:http://computerscience.yculblog.com/post.1798348.html










csupport:
----------华丽分割------------

1.在~/.vim/c-support/templates/Templates可以设置版权信息,如作者、信箱、版权归属等,新建.c或.cpp文件是可以看到,并且列出了使用模板文件位置,可以自己编辑

2.\if    插入一般函数

3.\im    插入主函数

4.\cfu    插入函数头,即函数说明

5.\cfr    插入一个frame comment,可以用来写变量说明

6.\p<    插入一个include , 并且把光标放在<>中

7.\rc    保存并编译

8.\rr   运行

9.\nr    可以在~/.vim/c-support/codesnippets中编写一些预编译代码或者代码块,通过此命令使用

---------------------------------------------

总之c.vim是个不错的c/c++辅助代码插件 , 恩.

---------------------附:详细的c.vim hotkey-------------------------

-- Help ---------------------------------------------------------------

  \hm       show manual for word under the cursor (n,i)
  \hp       show plugin help                      (n,i)

  -- Comments -----------------------------------------------------------

  \cl       end-of-line comment                 (n,v,i)
  \cj       adjust end-of-line comment(s)       (n,v,i)
  \cs       set end-of-line comment column      (n)
  \c*       code -> comment /* */               (n,v)
  \cc       code -> comment //                  (n,v)
  \co       comment -> code                     (n,v)
  \cfr      frame comment                       (n,i)
  \cfu      function comment                    (n,i)
  \cme      method description                  (n,i)
  \ccl      class description                   (n,i)
  \cd       date                                (n,v,i)
  \ct       date \& time                        (n,v,i)

  -- Statements ---------------------------------------------------------

  \sd       do { } while                        (n,v,i)
  \sf       for                                 (n,i)
  \sfo      for { }                             (n,v,i)
  \si       if                                  (n,i)
  \sif      if { }                              (n,v,i)
  \sie      if else                             (n,v,i)
  \sife     if { } else { }                     (n,v,i)
  \sw       while                               (n,i)
  \swh      while { }                           (n,v,i)
  \ss       switch                              (n,v,i)
  \sc       case                                (n,i)
  \s{       { }                                 (n,v,i)

  -- Preprocessor -------------------------------------------------------

  \p<       #include <>                         (n,i)
  \p"       #include ""                         (n,i)
  \pd       #define                             (n,i)
  \pu       #undef                              (n,i)
  \pie      #if  #else #endif                   (n,v,i)
  \pid      #ifdef #else #endif                 (n,v,i)
  \pin      #ifndef #else #endif                (n,v,i)
  \pind     #ifndef #def #endif                 (n,v,i)
  \pi0      #if 0 #endif                        (n,v,i)
  \pr0      remove #if 0 #endif                 (n,i)
  \pe       #error                              (n,i)
  \pl       #line                               (n,i)
  \pp       #pragma                             (n,i)

  -- Idioms -------------------------------------------------------------

  \if       function                            (n,v,i)
  \isf      static function                     (n,v,i)
  \im       main()                              (n,v,i)
  \i0       for( x=0; x<n; x+=1 )               (n,v,i)
  \in       for( x=n-1; x>=0; x-=1 )            (n,v,i)
  \ie       enum   + typedef                    (n,i)
  \is       struct + typedef                    (n,i)
  \iu       union  + typedef                    (n,i)
  \ip       printf()                            (n,i)
  \isc      scanf()                             (n,i)
  \ica      p=calloc()                          (n,i)
  \ima      p=malloc()                          (n,i)
  \isi      sizeof()                            (n,v,i)
  \ias      assert()                            (n,v)
  \ii       open input file                     (n,i)
  \io       open output file                    (n,i)

  -- Snippets -----------------------------------------------------------

  \nr       read code snippet                   (n,i)
  \nw       write code snippet                  (n,v,i)
  \ne       edit code snippet                   (n,i)
  \np       pick up prototype                   (n,v,i)
  \ni       insert prototype(s)                 (n,i)
  \nc       clear  prototype(s)                 (n,i)
  \ns       show   prototype(s)                 (n,i)
  \ntl      edit local templates                (n,i)
  \ntg      edit global templates               (n,i)
  \ntr      rebuild templates                   (n,i)

  -- C++ ----------------------------------------------------------------

  \+co      cout  <<  << endl;                  (n,i)
  \+c       class                               (n,i)
  \+cn      class (using new)                   (n,i)
  \+ci      class implementation                (n,i)
  \+cni     class (using new) implementation    (n,i)
  \+mi      method implementation               (n,i)
  \+ai      accessor implementation             (n,i)

  \+tc      template class                      (n,i)
  \+tcn     template class (using new)          (n,i)
  \+tci     template class implementation       (n,i)
  \+tcni    template class (using new) impl.    (n,i)
  \+tmi     template method implementation      (n,i)
  \+tai     template accessor implementation    (n,i)

  \+tf      template function                   (n,i)
  \+ec      error class                         (n,i)
  \+tr      try ... catch                       (n,v,i)
  \+ca      catch                               (n,v,i)
  \+c.      catch(...)                          (n,v,i)

  -- Run ----------------------------------------------------------------

  \rc       save and compile                    (n,i)
  \rl       link                                (n,i)
  \rr       run                                 (n,i)
  \ra       set comand line arguments           (n,i)
  \rm       run make                            (n,i)
  \rg       cmd. line arg. for make             (n,i)
  \rp       run splint                          (n,i)
  \ri       cmd. line arg. for splint           (n,i)
  \rk       run CodeCheck (TM)                  (n,i)
  \re       cmd. line arg. for CodeCheck (TM)   (n,i)
  \rd       run indent                          (n,v,i)
  \rh       hardcopy buffer                     (n,v,i)
  \rs       show plugin settings                (n,i)
  \rx       set xterm size                      (n, only Linux/UNIX & GUI)
  \ro       change output destination           (n,i)

------------------------------------------------------------------------------------------------------------------------------------------

cscope使用

  1. 建立cscope使用的索引文件
    1. 在你需要浏览源码的根目录下(如你想用cscope看linux源码)使用下面命令:
      • #: cscope -Rbkq<回车>
    2. R 表示把所有子目录里的文件也建立索引
    3. b 表示cscope不启动自带的用户界面,而仅仅建立符号数据库
    4. q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
    5. k在生成索引文件时,不搜索/usr/include目录
  2. 在源码根目录下打开任意.c文件,使用如下命令:
    1. Ctrl+]将跳到光标所在变量或函数的定义处 Ctrl+T返回
    2. :cs find s ---- 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
      :cs find g ---- 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
      :cs find d ---- 查找本函数调用的函数
      :cs find c ---- 查找调用本函数的函数
      :cs find t: ---- 查找指定的字符串
      :cs find e ---- 查找egrep模式,相当于egrep功能,但查找速度快多了
      :cs find f ---- 查找并打开文件,类似vim的find功能
      :cs find i ---- 查找包含本文件的文
    3. 2的所以命令也可以且按銉来实现:
      1. Ctrl+\ 再按 s 表示:cs find s命令
      2. 同理实现cs find + g,d,c,t,e,f,i命令
  3. cscope_map.vim说明:
    1. 有英文注释的我就不说明了,我就说一下里边的键map映射
    2. 如: nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
      1. nmap 表示在vim的普通模式下,即相对于:编辑模块和可视模式,以下是几种模式
        1.         :map            普通,可视模式及操作符等待模式
                  :vmap           可视模式
                  :omap           操作符等待模式
                  :map!           插入和命令行模式
                  :imap           插入模式
                  :cmap           命令行模式
      2. <C-\>表示:Ctrl+\
      3. s表示输入(即按:s)s
      4. : 表示输入':'
      5. “cs find s"表示输入"cs find s"也即是要输入的命令
      6. <C-R>=expand("cword")总体是为了得到:光标下的变量或函数。cword 表示:cursor word, 类似的还有:cfile表示光标所在处的文件名吧
      7. <CR><CR>就是回车吧,不太清楚
  4. 补充-----------------------------------------------------------------------------------------------------------------------------------------
  5. 在缺省情况下,cscope在生成数据库后就会进入它自己的查询界面,我们一般不用这个界面,所以使用了“-b”选项。如果你已经进入了这个界面,按CTRL-D退出。

    Cscope在生成数据库中,在你的项目目录中未找到的头文件,会自动到/usr/include目录中查找。如果你想阻止它这样做,使用“-k”选项。

    Cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过C++及Java后缀的文件。如果你希望cscope解析C++或Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。通常我们使用find来生成cscope.files文件,仍以VIM 7.0的源代码为例:

     

    cd ~/src/vim70
    find . –type f > cscope.files
    cscope -bq

    这条命令把~src/vim70目录下的所有普通文件都加入了cscope.files,这样,cscope会解析该目录下的每一个文件。上面的cscope命令并没有使用“-R”参数,因为在cscope.files中已经包含了子目录中的文件。

    注意:find命令输出的文件以相对路径表示,所以cscope.out的索引也相对于当前路径。如果你要在其它路径中使用当前的cscope.out,需要使用下面介绍的-P选项。

    Cscope只在第一次解析时扫描全部文件,以后再调用cscope,它只扫描那些改动过的文件,这大大提高了cscope生成索引的速度。

    下表中列出了cscope的常用选项:

     

    -R: 在生成索引文件时,搜索子目录树中的代码
    -b: 只生成索引文件,不进入cscope的界面
    -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
    -k: 在生成索引文件时,不搜索/usr/include目录
    -i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
    -I dir: 在-I选项指出的目录中查找头文件
    -u: 扫描所有文件,重新生成交叉索引文件
    -C: 在搜索时忽略大小写
    -P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

    要在VIM中使用cscope的功能,需要在编译VIM时选择“+cscope”。VIM的cscope接口先会调用cscope的命令行接口,然后分析其输出结果找到匹配处显示给用户。

  6. 在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:

     

    s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
    g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
    d: 查找本函数调用的函数
    c: 查找调用本函数的函数
    t: 查找指定的字符串
    e: 查找egrep模式,相当于egrep功能,但查找速度快多了
    f: 查找并打开文件,类似vim的find功能
    i: 查找包含本文件的文

    例如,我们想在VIM 7.0的源代码中查找调用do_cscope()函数的函数,我们可以输入:“:cs find c do_cscope”,回车后发现没有找到匹配的功能,可能并没有函数调用do_cscope()。我们再输入“:cs find s do_cscope”,查找这个C符号出现的位置,现在VIM列出了这个符号出现的所有位置。

    我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能,但它是在交叉索引数据库中查找,速度要快得多。

    VIM提供了一些选项可以调整它的cscope功能:

    - cscopeprg选项用于设置cscope程序的位置。

    - cscopequickfix设定是否使用quickfix窗口来显示cscope的结果,详情请“:help cscopequickfix”;

    - 如果你想VIM同时搜索tag文件以及cscope数据库,设置cscopetag选项;

    - cscopetagorder选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库,设置为1先查找tag文件。我通常设置为1,因为在tag文件中查找到的结果,会把最佳匹配列在第一位。

    VIM的帮助页中给出了使用cscope的建议方法,使用命令“:help cscope-suggestions”查看。

posted @ 2010-04-01 08:11 Kevin Bing 阅读(281) 评论(0) 编辑

注:以下资源来源于网络搜集

1.ctags
(1)到http://ctags.sourceforge.net/下载ctags源码ctags-5.6.tar.gz
http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz
(2)解压并安装
tar zxvf ctags-5.6.tar.gz
cd ctags-5.6
./configure && make && make install
(3)使用
[/home/brimmer/src]$ ctags -R

"-R"表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。"tags"文件中包括这些对象的列表:
l 用#define定义的宏
l 枚举型变量的值
l 函数的定义、原型和声明
l 名字空间(namespace)
l 类型定义(typedefs)
l 变量(包括定义和声明)
l 类(class)、结构(struct)、枚举类型(enum)和联合(union)
l 类、结构和联合中成员变量或函数
VIM用这个"tags"文件来定位上面这些做了标记的对象,下面介绍一下定位这些对象的方法:

1) 用命令行。在运行vim的时候加上"-t"参数,例如:
[/home/brimmer/src]$ vim -t foo_bar
这个命令将打开定义"foo_bar"(变量或函数或其它)的文件,并把光标定位到这一行。
2) 在vim编辑器内用":ta"命令,例如:
:ta foo_bar
3) 最方便的方法是把光标移到变量名或函数名上,然后按下"Ctrl-]"。用"Ctrl-o"退回原来的地方。
注意:运行vim的时候,必须在"tags"文件所在的目录下运行。否则,运行vim的时候还要用":set tags="命令设定"tags"文件的路径,这样vim才能找到"tags"文件。

在函数中移动光标
[{ 转到上一个位于第一列的"{"
}] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行 ([ and ] 也分别是两个指令)
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
Vim 的创造者是一名计算机程序员,因此这就不奇怪 Vim 中有许多帮助编写程序的功能:
跳转到标识符被定义和使用的地方;在另一个窗口中预览有关的声明等等。
(ctags使用部分参考了 文章“ctags和vim”,原文在
http://hi.baidu.com/original/blog/item/2cf8d53f00b7fcc27d1e71f0.html,
更多使用也请参考原文)


2. taglist
能够列出源文件中的tag(function, class, variable, etc)并跳转.
注意:taglist依赖于ctags,所以要先装ctags,否则taglist装了也没法用!
(1)到http://vim.sourceforge.net/scripts/script.php?script_id=273
下载taglist_42.zip,即
http://vim.sourceforge.net/scripts/download_script.php?src_id=6416
(2)解压得到两个文件
# unzip -d taglist taglist_42.zip
# cd taglist
# tree
.
|-- doc
| `-- taglist.txt
`-- plugin
`-- taglist.vim
(3)安装
cp doc/taglist.txt /usr/share/vim/vim61/doc/
cp plugin/taglist.vim /usr/share/vim/vim61/plugin/
(4)配置和使用
cd /usr/share/vim/vim61/doc/
启动vim,用 “:helptags .”来配置好帮助文件
重启vim,用“:TlistToggle”来打开和关闭taglist窗口。
可以用“:help taglist”来获得更多帮助信息


3.OmniCppcomplete:自动补全(需要先安装ctags)
下载地址:http://www.vim.org/scripts/script.php?script_id=1520
下载OmniCppComplete,解压可得到三个文件夹(autoload,after,doc),分别复制到~/.vim/中。这样OmniCppComplete就安装完成了。
Add the following to your .vimrc file (you only need the required and ctags sections, but I included options I found useful – hack as you please):

" --- OmniCppComplete ---
" -- required --
set nocp " non vi compatible mode
filetype plugin on " enable plugins


" -- optional --
" auto close options when exiting insert mode
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
set completeopt=menu,menuone

" -- configs --
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype (i.e. parameters) in popup window

" -- ctags --
" map <ctrl>+F12 to generate ctags for current folder:
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>
" add current directory's generated tags file to available tags
set tags+=./tags

使用方法:

omnicppcomplete主要依赖ctags生成的tags文件来判断补全的,所以首先应该生成一定的信息。也就是说应该先把类写好,然后再生成tags,以后出现对象的 ”.” 或 ”->”成员操作时它自动寻找成员函数。

在vim编辑文件时按Ctrl+F12,ctags会把这个文件所在目录以及子目录的所有文件信息收集生成一个名为tags的文件存在当前编辑文件所在目录。然后就可以实现代码自动补全咯。 在~/.vimrc中添加的 map…… 那句宏就实现这个功能。


4.supertab插件安装
下载supertab插件,复制supertab.vim到vim安装目录的plugin目录下,使用时只要直接按tab键,就可以直接进行补全。

5. csupport (http://www.vim.org/scripts/script.php?script_id=213):模板
安装:
(1) 下载cvim.zip到~/.vim目录,unzip,在/etc/vim/vimrc中添加 filetype plugin on 即可使用该插件。
(2) 阅读README.csupport,需要进行的修改主要包括
    (a) 修改c-support/templates/Templates
    (b) 修改c-support/templates目录下的c.*.template文件中的代码风格
    (c) 修改~/.vimrc文件,加入filetype plugin on
    (d) a)进入vim,执行:helptags ~/.vim/doc/
(3) :h csupport-vim-usage获得帮助

5.文件浏览器和窗口管理器 -- 插件: WinManager:
下载地址:http://www.vim.org/scripts/script.php?script_id=1440
按照install details部分安装(第4步要更改):
let g:winManagerWindowLayout = "FileExplorer|TagList"

这样输入:WMToggle就会调出wm了

6.阅读代码:cscope:

下载地址:http://sourceforge.net/project/showfiles.php?group_id=4664

软件安装:  (也可直接在新力得里面装)

  1. ./configure --with-flex  (注:如果平台是Linux,最好带上 --with-flex选项)
  2. make  (注:我没有遇到错误)
  3. make install (注: 直接安装好了)
  4. 修改vim配置文件vimrc.你可以修改/etc/vimrc使用所有用户都使用本配置文件,当然你还可以修改~/.vimrc
    1. 下载配置文件:cscope_map.vim  
    2. 把cscope_map.vim里从 if has("cscope")  到 endif里边的内容复制到/etc/vimrc里边

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值