个人的IDE制作(vim)——适用于C++/C

引用文章A:http://learnvimscriptthehardway.onefloweroneworld.com/

引用介绍:初学者建议通读一遍。对VIM能有整体性的了解。

引用文章B:http://blog.csdn.net/wooin/article/details/1858917

引用介绍:文章本身很好。但把我坑了两天。无它,此博文补全功能不支持C++。但建议浏览,因为可以从整体上知晓如何配置IDE。

引用文章C:http://easwy.com/blog/archives/advanced-vim-skills-omin-complete/comment-page-1/

引用介绍:通过此文完成C++补全功能。似乎也是一个系列。有空阅读后再“补全”吧。

 

 

首先,希望制作IDE的孩子们摆正心态。不要期待能够有一个和VS媲美的IDE。VIIM仅仅是一个编辑器而已。

 本文中尚存在疑惑,可以参考以上引用文章。此文并非初学者教程,而是初学者练习结果。所以,更偏向于个人备忘而非教学。

所以,推荐阅读引用文章。当对引用文章存在疑问时,可以参考此文。

我的VIM配置:www.github.com/zheng39562/vimrc

 

文中需要注意的事项:

1,符号$ 如无特别指明,皆表示后跟着一个自定义变量。如$path。path表示路径。具体设置,且勿直接带入。

2,文中大部分插件都可以使用help找到帮助文档。通过阅读帮助来获得更多信息。

 

一、语法高亮。

1:初学者建议使用默认高亮。在vimrc中添加。

syntax enable
syntax on

 

2:GVIM中可以选择配色。具体在:编辑->配色方案。

3:如果想添加自己的语法高亮,可以在路径:~/.vim/syntax/中添加。

  1,引用文章B中,有一个简短的例子。

二、函数,变量,宏的搜索和补全:Ctags。

1:首先需要安装ctages。此软件通常是默认安装的,如果不是,可以尝试yum(但不确定是否有此软件)或者去官网下载http://ctags.sourceforge.net

2:使用。

  1,如果是C,只需要输入:ctags -R。如果是C++,默认补全是不支持的,需要安装插件OmniCppComplete。地址:http://www.vim.org/scripts/script.php?script_id=1520

  2,在工程的最上级目录输入指令。下面是C++的补全指令。

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
--c++-kinds=+p  : 为C++文件增加函数原型的标签
--fields=+iaS   : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
--extra=+q      : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全

 

    1)需要注意,每次定义了新的函数或类型,需要更新tags文件。暂时还未找到简易方法。对此有一个初步想法:将其定义成vim快捷键。但实现还存在困难。

  3,声彻tags文件后,你需要在你的当前文件中输入:set tags= $current_path/tags.  $current_path是指工程目录最上级目录。如果此工程目录是常用的,可以添加的.vimrc中。

  4,完成以上步骤后,可以尝试 <C-]>  <C-T> 来确定功能是否成功。

    1)<C-]> : 跳到定义处。  <C-T> : 回跳。

3:补全功能:文中的补全功能,需要tags文件支持。

三、源代码总览:TagList。

  1,作用:可以列出当前源文件的函数,变量,类等。对源代码有整体的概览。

    1)此为vim插件。可以在官网下载。

  2,需要在vimrc中添加设置:

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

  3,可以使用Tlist打开此插件。

  4,还有很多其他功能,但因时间和需求,暂时搁置。

四、文件浏览器:netrw.vim

  1,作用:查看当前目录中包含的文件。指令:e $path

  2,常用的目录和文件操作:

<F1> 显示帮助
<cr> 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
- 返回上级目录
c 切换vim 当前工作目录正在浏览的目录
d 创建目录
D 删除目录或文件
i 切换显示方式
R 文件或目录重命名
s 选择排序方式
x 定制浏览方式, 使用你指定的程序打开该文件

五、窗口管理器:WinManager

  1,作用:可以理解成分窗口的工具。

  2,一个例子:同时打开TList和netrw。可以添加到vimrc中尝试效果。

et g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>

六、ctags加强版:Cscope.

  1,使用。下载地址:http://cscope.sourceforge.net。

    1)需要解压,编译后安装。不确定yum有没有。

    2)安装好后,在vimrc中添加:set cscopequickfix=s-,c-,d-,i-,t-,e-  // 设定使用quickfix窗口

    3)使用cs需要在工程根目录下设置。

cscope -Rbq 

 

  2,"cscope find"的用法: cs find c|d|e|f|g|i|s|t name

0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件

    1)以下是参考映射:个人更喜欢的映射前缀为:<leader>f。此为引用文章B复制而来,下述指令为通过本人验证,无法确保其正确性。

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>

 七、报错窗口:quickfix.

  1,介绍:vim自带窗口。机制:将报错信息储存在于一个默认文件中,并使用quickfix打开。

  2,指令:可是在很多场合使用。也可以过滤部分报错。具体设置,需要进一步学习。

cw // 打开quickfix
cn // 下一个结果。
cp // 上一个结果。

 

八、多文件浏览(多BUFFER):MiniBufExplorer

  1,效果:打开二个以上文件时,就会自动出现。

  2,指令:TAB / <C-Tab> 进行切换。

九、h/c文件切换:插件A。引用文章B。

  1,未使用。

十、搜索和高亮书签:Grep | VisualMark。引用文章B。

  1,未使用。

十一、补全功能。

  1,功能:补全函数,类,宏等等。

    1)依赖:tags文件。

    2)可以阅读:help new-omni-completion 了解更多详情。

    3)需要在vimrc添加:(暂时不懂原理)

filetype plugin indent on
set completeopt=longest,menu

  2,一些补全功能快捷键。

Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y  表示退出下拉窗口, 并接受当前选项
   
Ctrl+X Ctrl+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 拼写建议

  3,补全功能的缺陷:需要更新tags文件。如果新定义一个类或函数,需要更新tags文件。 

    1)正在尝试直接使用vim快捷键解决此问题。但暂时看来似乎不行。如有成功者,期望能够评论或email:zheng39562@163.com

十二、补充。

  1,因为时间和需求原因。部分的插件和功能并未完全按张引用文B中来执行。而且,个人并不太希望用太多的插件,而更希望了解机制和原理后,自行完成IDE的余下工作。

posted on 2015-01-28 11:35  zheng39562  阅读(395)  评论(0编辑  收藏  举报

导航