多语言展示
当前在线:995今日阅读:181今日分享:30

Ubuntu下将VI改造成IDE工具

本次准备将 Ubuntu 自带的 VI 编辑器打造成适合我们 C 语言及内核开发时的 IDE,先进行基础改造工程。
方法/步骤
1

本次准备将 Ubuntu 自带的 VI 编辑器打造成适合我们 C 语言及内核开发时的 IDE,先进行基 础改造工程,下面是整个改造计划:

2

0.实践环境

3

Ubuntu13.10(64 位,Kernel 为自已编译的 3.13.6),涉及工具及插件有:

4

会用到示例的代码片段:

5

#include void main(void) {     printf(“Hello World!”);     exit(0); }

6

1.自我改造

7

由于 Ubuntu 默认只安装了 VI,此时我们先将其升级为增强版 VIM,需执行如下命令:

8

sudo apt-get install vim

9

升级为 VIM 后,我们可以自由的配置相应的配置文件和安装插件,强壮每一个 VI。

10

对于 VIM 工具,默认的配置文件存放在/etc/vim/vimrc 和/usr/share/vim/vimrc 两文件里,两个都可以修改,没有硬性规定哪个能改哪个不能改,两个都是系统级配置,用于VIM 初始化配置用,后一个与工具包配合在一起,我们一般修改全局通用配置则是前一个,这一改会影响到所有的用户,详细说明可使用 man vim 查阅,我们此处需要一个属于自己的个性配置,接下来是配置时间:

11

先将上面的 vimrc 复制到自己的主目录($HOME)下(也可自行创建一个,但无参考,复制过来的文件里有一些标准的配置未打开,有说明,可根据实际需要修改):

12

cd ~ cp /etc/vim/vimrc .vimrc

13

复制过来的文件以隐藏文件形式存在,接下来打开复制过来的文件按需配置了:

14

a.语法高亮

15

在配置文件里有如下内容:

16

' Vim5 and later versions support syntax highlighting. Uncommenting the next ' line enables syntax highlighting by default. if has('syntax')     syntax on endif

17

由于我们的VIM 版本是7.4,故而只要保证上面的语句没有使用'进行注释就可以,其中主角是syntax on 一句。

18

b.显示行数

19

在配置文件里加入如下一句就可以在左边显示行号:

20

set number 或 set nu

21

c.设置 TAB 缩进

22

在学习 C++时老师告诉我们一个 TAB 占用 8 个字节,而 Linux内核里的 C 风格也是一 样,我们在 VIM 里有如下设置缩进的配置项:

23

set tabstop=8 set softtabstop=8 set shiftwidth=8

24

上面的配置中 tabstop 表示一个 TAB 占用的字节数,而 softtabstop 则表示我们输入一个 TAB 实际占用的字节数。

25

如果set expandtab被设置时,即.vimrc里包含该句时,那么每输入一个 TAB键时会自动将 TAB键转换为 softtabstop个空格,如果没被设置(相当于 set noexpandtab),那么 VIM默认会按 n*softtabstop / tabstop个 TAB键+n*softtabstop%tabstop个空格键的组成形式来缩进, 上面 tabstop和 softtabstop是一样的,即缩进的都是 n个 TAB键,不会再跟空格键。

26

一般不设置 expand,该参数在 Android开发倒是有用,在 Android里要求将 TAB转换为 8个空格。

27

shiftwidth 一般与 softtabstop一致,表示在 Normal模式下使用>>,<<和 Insert模式下使用,进行缩进的空格数。

28

d.设置自动缩进

29

开启自动缩进:每行的缩进值与上一行相同,如果使用 noautoindent 则取消设置,此处我 们设置缩进:

30

set autoindent

31

开启 C/C++语言自动缩进支持:

32

set cindent

33

设置 C/C++语言的具体缩进方式(仅参考):

34

set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s

35

至此,关于 VIM 自身的改造造一段落,已满足基本的需求,接下来使用注入外部工具来扩 展功能了。

36

2.插上翅膀,展翅高飞

37

a.ctags

38

ctags 工具用于为源码生成标签索引,以便于 VI 等编辑器或 Taglist 等插件工具使用,其遍 历指定工程目录下的源码文件生成相应的符号,为我们检索函数、变量等内容提供指引。接下 来先安装它:

39

sudo apt-get install ctags

40

安装完后我们使用该工具为我们的 demo 工程生成相应的标签文件,我们在~/demo 目录下 有 hello.c 文件,文件内容为我们文章开头提及的代码段,接下来开始生成这万物之基的标签:

41

cd ~/demo ctags -R *

42

执行后会在当前目录下生成 tags 文件,我们可以打开看里面生成的内容:

43

xinu@slam:~/demo$ cat tags!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;' to lines/!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/!_TAG_PROGRAM_AUTHORDarren Hiebert /dhiebert@users.sourceforge.net/!_TAG_PROGRAM_NAME Exuberant Ctags //!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/!_TAG_PROGRAM_VERSION 5.9~svn20110310 //main hello.c /^void main(void) {$/;' f

44

接下来要如何使用呢?有如下方法:

45

第一种,使用 vim 时加-t 参数,如下操作:

46

xinu@slam:~/demo$ vim -t main

47

这时 vim 会打开定义 main 这个标签(变量、函数或其它)所在的文件,并把光 标定位到该行。

48

第二种,在 vim 的 normal 模式下使用:ta 命令(ta 是 tag 的缩写),如查找 main 时用到:ta main

49

第三种,在 vim 的 normal 模式下先将光标定位到要查找的变量名或函数名等想查找的字 符上,然后按下组合键“ctrl+]”,此时会跳转到相应的文件,再使用“ctrl+o”或“ctrl+t”跳转回查找 时所在的位置。

50

如果有时候不太清楚操作,还可以找我们的万能大师帮助下,在 vim 的 normal 模式下使 用:help tags 命令查看帮助文档,了解 ctags 的用法。

51

还有点要注意的是运行 vim 时要在生成的 tags 文件所在目录下操作才能生效,如果是在 其他目录下,则需要在 normal 模式下使用:set tags=命令来设定使用的 tags 文件路径了。

52

b.cscope

53

cscope 与 ctags 功能相似,但要更强大些。它并不像 ctags 简单的标签查找,它可以指定要 查找的类型(函数、变量)以及函数的调用关系等。说了有这么好,我们先搭好环境再说,把 它安装上:

54

sudo apt-get install cscope

55

安装好后,我们仍然在 demo 下创建 cscope 需要用到的符号数据库:

56

cd ~/demo cscope -Rbq

57

此时会生成如下文件:

58

cscope.in.out cscope.out cscope.po.out

59

接下来需将这生成的 cscope 索引库被 vim 加载使用,使用 vim 打开 hello.c,然后在 normal 模式下执行:cs add cscope.out 命令,接下来就可以使用 cscope 来操作工程了,主要用到 cs f,详 细的使用说明可以在 normal 模式下执行:cs help 命令查阅。(cs 是 cscope 命令的缩写,f 是 find 的缩写)

60

c.vim-addons

61

vim 的插件管理器 vim-addons,可以帮助我们明明白白管理我们的 vim 里能支持和已使用 的插件,还是老样子,先将其安装上:

62

sudo apt-get install vim-scripts

63

此时会将 vim-addons 和 vim-addon-manager 等工具安装上,运行这两个命令的任何一个, 均可看到插件的开启、支持状况。

64

由于我们现在要安装的插件只给自己使用,故而先在我们的$HOME目录下创建相应的目录:

65

cd ~ mkdir -p .vim/plugin .vim/doc

66

至此安装插件的基础环境搭好了,接下来是安装需要的插件了。

67

d.taglist

68

taglist 是标签浏览器,用于列出当前文件中的所有标签(相当于 windows 下的 source insight 左边的内容,包含宏、变量、函数名等)。接下来现炒一个插件,别浪费 vim-addons 的苦心:

69

xinu@slam:~$ vim-addons install taglistInfo: installing removed addon 'taglist' to /home/xinu/.vimInfo: Rebuilding tags since documentation has been modified ...Processing /home/xinu/.vim/doc/Info: done.

70

安装好后我们采用默认配置,直接用 vim 打开 hello.c 文件,然后在 normal 模式下执 行:Tlist 命令,可以在左边再打开一个列表窗显示当前文件包含的符号,再执行相同命令则关闭左边的列表窗。那如何在列表窗和源码窗之间来回切换呢?只需要按住 ctrl 键,再双击 w 键即 可切换(即 ctrl-w+w)。

71

e.code_complete

72

该插件没有在 vim-addons 列表里,在列表里的是 omnicppcomplete,可以使用 vim-addons install omnicppcomplete 安装,我们在这里还是使用 code_complete 先:

73

从 http://www.vim.org/scripts/script.php?script_id=1764 下载 2.9(当前最新版)版的 code_complete.vim 文件,然后将其复制到我们的插件目录里:

74

cp ~/Downloads/code_complete.vim ~/.vim/plugin/

75

接下来要修改下生成 tags 的命令:

76

ctags -R --c-kinds=+p --fields=+S .

77

然后在输入关键字后按下 TAB 键就可以进行补全了,如使用 vim 打开文件后,输入 main 后再按下 TAB 键,此时会将整个 main 函数的框架都生成好,相关的效果可访问 http://files.myopera.com/mbbill/files/code_complete.gif 查看。

78

3.实例演示

79

终于搭建好相关环境了,而我们主要还是操作 Linux内核代码,而在源码下刚好 Kbuild 有指令可生成 ctags 和 cscope 文件,在 make help 里有如下内容:

80

tags/TAGS - Generate tags file for editorscscope - Generate cscope index

81

于是我们分别执行 make tags 和 make cscope 命令来生成相应的文件。下图是在 Kernel 源码 下生成 tags 和 cscope.out 文件后打开 init/main.c 文件并进行操作后的截图:

82

此处需要配置的是:cs add cscope.out,还有使用:Tlist 打开左边 TAG 列表,暂不需其他配置。 接下来就可以使用“ctrl+]”和“:cs f g start_kernel”之类的指令来搜索标签了。这太方便了,在整个 Terminal 窗口就可以进行代码的定位阅读了,一个“ ” 爽 字了得啊!

83

4.后记

84

上面搭建好的环境已满足基本的需求,当然,如果还想尝试新的提升效率的技巧,可以再 安装其他插件或修改 vimrc 来配置。END

推荐信息