个人的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) 编辑 收藏 举报