Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5634909
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: LINUX

2010-04-02 20:56:28

这里的内容是针对编程序或者阅读源代码时候使用的,本来它的有些内容可以属于其它类的,但是这里单独用"编程相关"将这类命令集中起来了。


*编译并自动定位第一个错误:

输入":make filename"。

注意:在vi中编译test.c,直接用":make test"就可以了,注意是不带后缀的哟。如果有makefile的话可以再vi直接敲“:make”,然后就能够定位到第一个错误上面了。


**关于ctags跳转:

 通常我们需要使用名为ctags的程序来生成这样的tag文件。vim能直接使用ctags程序所生成的tag文件。


*安装ctags:

$sudo apt-get install ctags

注意这里是在ubuntu下。


*为当前目录文件生成tags文件:

$ctags -R ./

或$ctags -R

这里,如果ctags -R ../将会也生成父目录文件的tags,ctags利用tags进行跳转。


*载入当前标签:

输入“:set tags=tags”.

这将载入(当前目录的)所需标签文件,如果不载入则没有ctags所需要的tags文件,为了实现自动载入启动可以在~/.vimrc加入如下内容:

if has("ctags")

    if filereadable("tags")

        set tags=tags

    endif

endif


*直接打开文件并跳转到函数:

$vim -t func

这样,将打开vim并且直接跳转到func函数的位置。


*跳转到当前光标函数实现内部:

输入“[Ctrl]]”.

实现这个功能需要有tags标签。


*回到[Ctrl][之前的位置

输入“[Ctrl]T”.

这里,应该是[Ctrl]]之前的位置,有待修改。


*分割一个窗口并跳转到当前光标函数实现内部:

输入“[Ctrl]w ]”.


*跳转到指定函数实现处:

输入“:tag func”.

或输入“:tselect func”

这样将跳到func函数的实现地方,tag func如果有多个将自动跳到第1个,tselect func如果多个则显示一个所有匹配列表,让你选择哪个。这里标签名可以用[Tab]进行命令补全.


*新开一个窗口,查看tag的函数:

输入":stag tagname".

这里,tagname是一个tag标签(例如函数名)效果相当于首先用:split,再用tag tagname.窗口是水平的。


如果有多个tag匹配则:

*切换到下一个匹配标签处:

输入“:tnext”


*切换到上一个匹配标签处:

输入“:tprev”


*切换到第一个匹配标签处:

输入“:tfirst”


*切换到最后一个匹配标签处:

输入“:tlast”


*显示所有匹配标签:

输入“:tags”


*显示所有匹配标签并让你选择指定的:

输入“:tselect”。

**


**关于代码折叠:

*设置可以折叠:

输入“:set fdm=syntax”.

或输入“:set fdm=indent”.

这里,fdm实际上是foldmethod的简写,第1个syntax方式是按照语法进行折叠(我倾向用这个所以后面都是对这个方式折叠下的命令),第2个是对大括号内的进行折叠。


*对当前代码块进行折叠:

输入“zc”.

这里,需要把当前光标放置到需要折叠的代码块的内部,因为一般程序结构都是嵌套的,这个命令折叠的是最内层的代码块。


*对当前代码块所在范围代码块全部折叠:

输入“zC”.

这里,折叠的不仅仅是最内层的代码块了,而是连带着递归地折叠了包含该代码块的这个代码块。


*展开当前代码最外层折叠:

输入“zo”.

这里,是对光标下的折叠代码块最外层折叠进行打开,内层的折叠仍旧折叠着,除非你移动到那里再次用这个命令打开折叠,有时候你按一下左右方向键也会打开折叠。


*展开当前代码包含的所有折叠:

输入“zO”.

这里,展开的不仅仅是最外层的代码块了,而是连带着递归地展开了该代码块包含的所有内层代码块。


*折叠当前文件所有可能折叠的代码:

输入“zM”.

这样,将把当前文件的所有可以折叠的代码进行折叠。


*展开当前文件所有折叠的代码:

输入“zR”.

或输入":set foldlevel=999".

这样,将把当前文件的所有折叠的代码展开。


*全部展开或折叠当前文件所有可以折叠的代码:

输入“zi”.

这里,相当于zR和zM命令的“综合”,这个命令在全部折叠和全部展开两个命令之间进行“开关”切换。


*到当前打开的折叠的开始处:

输入“[z”.


*到当前打开的折叠的末尾处:

输入“]z”.


*跳到下一个折叠的开始处:

输入“zj”.

这里,关闭的折叠也被计入。


*跳到上一个折叠的末尾处:

输入“zk”.

这里,关闭的折叠也被计入。

**


**cscope的使用

【介绍】

cscioe功能:

可以解决类似如下的问题:

1)符号在哪里实用的?

2)在哪里定义的?

3)变量从哪里得到它的值的?

4)全局变量的定义?

5)这个函数在源代码中的什么文件中?

6)什么函数调用了这个函数?

7)这个函数调用了什么函数?

8)消息“out of space”来自哪里?

9)这个源文件在目录中的结构?

10)哪些文件包含了这个头文件?


【cscope下载安装,与配置】

*软件下载:


*软件安装:

1)./configure --with-flex (注:如果平台是Linux,最好带上 --with-flex选项) 

2)make (注:我没有遇到错误)

3)make install (注: 直接安装好了)


*cscope配置

1)修改vim配置文件vimrc.你可以修改/etc/vimrc使用所有用户都使用本配置文件,当然你还可以修改~/.vimrc 

a)下载配置文件:  ()

b)把cscope_map.vim里从 if has("cscope")? 到 endif里边的内容复制到/etc/vimrc里边去 

c)里边的命令意思自己琢磨


【cscope相关命令】

*生成索引文件,在源代码目录中输入:

$cscope -Rb

另外,有的时候:

$cscope -Rbkq<回车>

这里,

R 表示把所有子目录里的文件也建立索引

b 表示cscope不启动自带的用户界面,而仅仅建立符号数据库

q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

k在生成索引文件时,不搜索/usr/include目录

更多查看man.


(vim下的相关命令:)

*简单的帮助命令列表:

输入“:cs help”

或输入":cs"

cs是cscope的简写命令,后面也是如此。


*添加一个新的cscope数据库链接:

输入“:cs add cscope.out”

这样,把当前目录下面的cscope.out这个cscope数据文件添加了,就可以利用其中的内容了,如果没有链接数据库,那么就用不了相应的功能了。可以把这个命令加入到.vimrc中,省得人工输入。


*查看当前已经链接的cscope数据库链接:

输入":cs show"


*查找相关命令:

1)查找C语言符号,即查找函数名、宏、枚举值等出现的地方

输入":cs find s <符号名>".

或输入"cs f s <符号名>". 

这里,等价于":cs find 0".


2)查找函数、宏、枚举等定义的位置,类似ctags所提供的功能:

输入":cs find g <符号名>".

或输入"cs f g <符号名>".

这里,等价于":cs find 1".


3)查找本函数调用的函数:

输入":cs find d <符号名>".

或输入":cs f d <符号名>".

这里,等价于":cs find 2".


4)查找调用本函数的函数:

输入":cs find c <符号名>".

或输入":cs f c <符号名>".

这里,等价于":cs find 3".


5)查找指定的字符串:

输入":cs find t <符号名>".

或输入":cs f t <符号名>".

这里等价于":cs find 4"


6)查找egrep模式,相当于egrep功能,但查找速度快多了:

输入":cs find e <字符串>".

或输入":cs f e <字符串>".

这里,等价于":cs find 6",注意没有5.


7)查找并打开文件,类似vim的find功能:

输入":cs find f <文件>".

或输入":cs f f <文件>".

这里,等价于":cs find 7".


8)查找包含本文件的文件:

输入":cs find i <文件>"

这里等价于":cs find 8".

以上的"cs find"均可简写为"cs f".


*将cscope的数据库内容作为tags:

输入":set cst".

或输入":set cscopetag".

这样就 会把cscope的数据库当成tag文件了,在只有cscopt.out的情况下可以用[Ctrl]]进入相应的函数了。这样只用cscope不用ctags了。关闭这个功能是":set nocst".但是cscope无法在tag的时候自动不全标号,另外,cscope虽然搜索全局字符串似乎挺好,但是在用cscope的方式tag函数的时候,如果源文件修改了例如增加几个空行之类的,那么回出现定位错位,而ctags就不会。


*察看光标下的函数:

输入"[Ctrl]\g".

这里,是加入cscope.vim的相关语句到.vimrc中之后有的快捷键。cscope.vim内容在“其他相关“里面最后有列出了。


*察看调用光标下函数的函数:

输入"[Ctrl]\c".

还有其他等等,察看脚本内容就知道了,实际是"[Ctrl]\"等价于输入":cs f",之后输入相应的字符f,g,c等,就可以查找当前光标下标号的东西了。

**


*到当前局部变量的定义处:

输入“gd”.

这里,当前的意思是光标停留其上的单词。


*到当前全局变量的定义处:

输入“gD”.


*跳转到当前代码块的开头:

输入"[{".

这里代码块一般是用"{}"扩起来的。



*查找在头文件中的某个相关定义:

输入"[Ctrl]w[Ctrl]i".

这样,vim可以直接根据头文件进行查看,察看当前光标下的符号在头文件的相关定义。


*注释第1行到第20行:

输入“:1,20s/^/\/\//g”.

这里,“^”表示在行首插入,因为Vim/Vi替换命令格式中默认“/”为分隔符,这样就需要使用转义符“\”,表示“/”就要写成“\/”才可以,所以命令如上所示。强烈建议各位看官使用,省时省力省键盘还,如果shell的注释符号'#'就不用转义了。


**简单重排功能

*当前行向右移一个shiftwidth:

输入" >>".

这里, 整行会向右移一个 shiftwidth(预设是 8 个字元,可重设)。


*当前行向左移一个shiftwidth:

输入" <<".

这里, 整行会向左移一个 shiftwidth(预设是 8 个字元,可重设)。


*将{,(或[等符号括起来的文本都右移:

输入">%".

这里,您必须把光标放在这些符号({,(或[)上面. 


*将{,(或[等符号括起来的文本都左移:

输入"<%".

这里,您必须把光标放在这些符号({,(或[)上面. 


*自动缩进选中代码的格式:

(1)输入“v”,

(2)移动光标,选择待调整的代码块,

(3)输入“=”。

这里,关键是先进入选择模式选择相应的代码,然后按‘=’键,如果只按=就格式化当前行(需移动一下光标才看得出来)。

**


*打开一个预览窗口来显示函数 "write_char":

输入":ptag write_char".

这样之后,光标会自动移动回原来的位置。窗口是水平的。


*关闭预览窗口:

输入":pclose".

这里,尽管当前光标不在预览窗口,也会关闭预览窗口。


*在预览窗口中编辑一个指定的文件:

输入 ":pedit "。

这在编辑头文件时很有用,这里的是要编辑的文件名,还可以同时定位到函数比如:":pedit +/funcs defs.h"。这样可以在原有光标不变的情况下在预览窗口中修改。


*查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配:

输入"psearch <函数名>"。

这在使用没有标签文件的库函数时十分有用。虽然它不是很智能,但是它能够到库头文件中搜索。


**quickfix定位代码错误的使用

Quickfix模式的主要思想是保存一个位置列表,然后提供一系列命令,实现在这个位置列表中跳转。加快你的开发速度。

假设:你编写了一个程序,在vi中输入":make"调用makefile来编译的时候程序中有错误,回车就会返回编辑界面(实际会自动定位到第一个错误)。运行如下命令可以定位错误:


*显示并定位到第n个错误:

输入":cc n".

这样就会自动定位到第n个错误的位置,并显示相应的错误信息,如果没有n参数,就重现当前错误信息。


*定位到当前错误的下一个错误处:

输入":cn".

这样如果当前在第n个错误的状态,这样会切换到第n+1个错误并定位到相应的位置。


*定位到当前错误的上一个错误处:

输入":cp".

这样如果当前在第n个错误的状态,这样会切换到第n-1个错误并定位到相应的位置。


*列出当前所有错误列表:

输入":cl".

这样列出一个错误列表,只是显示出了所有错误回车就又回到先前界面了。


*在当前窗口底部打开一个quickfix窗口列出所有错误信息:

输入":cw".

这样会在当前窗口底部新开一个窗口,方便的看到所有错误信息,还可以把光标移动到相应的错误之处然后回车,就会回到代码窗口并定位到相应的错误位置。


*回到上一个错误列表:

输入":colder".

或输入":col".

这样回到上一次的quickfix错误列表,例如再次编译还有错误,这个命令返回的是上次而不是这次的错误列表,运用cw等都是上次的错误信息。


*进入较新的错误列表:

输入":cnewer".

或输入":cnew".

这个命令的作用和前面colder相反,进入更新的错误列表。

**


**关于自动补全:

*显示自动补全列表:

输入"[Ctrl]p"

这里,是在插入模式下进行的,例如当前输入了"aa"字符,然后输入[Ctrl]p这样会列出所有以aa为开头的单词列表。它们会在当前缓冲区、其它缓冲区,以及当前文件所包含的头文件中查找以光标前关键字开始的单词。


*选择自动补全列表中匹配的下一项:

输入"[Ctrl]n".

这样如果有多个匹配的单词项那么会高亮下一项进行选择。如果不够则循环显示。


*选择自动补全列表中匹配的上一项:

输入"[Ctrl]p".

这样如果有多个匹配的单词项那么会高亮上一项进行选择。如果不够则循环显示。


*自动匹配整个行:

输入"[Ctrl]x[Ctrl]l".

这里,注意要在编辑状态下面运行的,会弹出文件中所有的整个行,之后用[Ctrl]p等就可以自动匹配了。

如果CTRL-N和CTRL-P补全时查找所包含的头文件,耗时会比较久。此时,可以在’complete‘选项中去掉'i'标记":set complete-=i" 。

**

阅读(1313) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~