vi编译器插件

来源:互联网 发布:桔城seo伪原创工具 编辑:程序博客网 时间:2024/06/03 12:19

一、vi编辑器的配置文件及目录

         需要提到的是,vi编辑器的配置文件主要有两个地方

               1.  ~/.vimrc     #这里以.开头说明这个配置文件是隐藏文件。

               2.  ~/.vim        #这里的.vim是一个文件夹,文件夹也是隐藏的。  

       .vimrc配置文件是用以配置vim启动时的一些显示,如语法高亮、字体、行号显示....包含的东西比较多,无法一一列出

       .vim文件夹中包含的东西则比较丰富,不过最主要的功能还是存放vi插件一些相关的东西(ps:vi比较强大的重要原因之一就是因为其强大而丰富的插件)。

二、我们需要什么样的编辑器?

        我们需要一个什么样的编辑器,或者说我们需要什么样的一个IDE(Intergrated Development Environment),让我们先看看Eclipse的界面是如何的:


       这个IDE我将其分成5个区域,各个区域的功能如图中所示,功能虽然比较强大,但是文件编辑区则显得比较局促,当文件比较大时,从其中某一行到另一行则需要不停得滑动滚轮或者ctrl+F来查找关键字

       而我配置之后的vi编辑器的界面如下:


  这个界面大概会有四个部分,左栏上下两个区域分别是文件浏览器和函数变量预览区域,最大的那个部分是文件编辑区,最上面那一长条是多文件标签,的确看起来比Eclipse要清爽了许多,但是功能丝毫没有少。当然如果会有一些附加的功能那就更好了,比如说自动补全,比如说更丰富的颜色高亮,比如说快捷键编译运行等等。

三、.vimrc配置文件

   先贴出我的.vimrc文件,不想看的可以直接粘贴到自己的.vimrc文件中,但是这样的话,你就只能使用和我一样的界面了,就没法自己定制自己喜欢的界面了。(不过话说回来有的我也不是很懂)

   还有这里先列出的配置文件不包含vim插件的配置(有的vim插件也需要在.vimrc文件中进行相应的配置才能更好的工作)。

[plain] view plaincopy
  1. set nocompatible  
  2.   
  3. if has("syntax")  
  4.   syntax on            " 语法高亮  
  5. endif  
  6. ""colorscheme molokai        " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下  
  7. colorscheme koehler  
  8. " detect file type  
  9. filetype on  
  10. filetype plugin on  
  11.   
  12. " If using a dark background within the editing area and syntax highlighting  
  13. " turn on this option as well  
  14. "set background=dark  
  15. set guifont=Monaco\ 10  
  16. set guifontwide=文泉驿等宽微米黑\ 10  
  17. " Uncomment the following to have Vim jump to the last position when  
  18. " reopening a file  
  19. if has("autocmd")  
  20.   au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif  
  21.   "have Vim load indentation rules and plugins according to the detected filetype  
  22.   filetype plugin indent on  
  23. endif  
  24.   
  25. " The following are commented out as they cause vim to behave a lot  
  26. " differently from regular Vi. They are highly recommended though.  
  27.   
  28. "set ignorecase        " 搜索模式里忽略大小写  
  29. "set smartcase        " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。  
  30. set autowrite        " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。  
  31. set autoindent        " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置  
  32. "set smartindent        " 智能对齐方式  
  33. set tabstop=4        " 设置制表符(tab键)的宽度  
  34. set softtabstop=4     " 设置软制表符的宽度      
  35. set shiftwidth=4    " (自动) 缩进使用的4个空格  
  36. set cindent            " 使用 C/C++ 语言的自动缩进方式  
  37. set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s     "设置C/C++语言的具体缩进方式  
  38. "set backspace=2    " 设置退格键可用  
  39. set showmatch        " 设置匹配模式,显示匹配的括号  
  40. set linebreak        " 整词换行  
  41. set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去  
  42. "set hidden " Hide buffers when they are abandoned  
  43. set mouse=a            " Enable mouse usage (all modes)    "使用鼠标  
  44. set number            " Enable line number    "显示行号  
  45. "set previewwindow    " 标识预览窗口  
  46. set history=50        " set command history to 50    "历史记录50条  
  47.   
  48.   
  49. "--状态行设置--  
  50. set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行  
  51. set ruler            " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。  
  52.   
  53. "--命令行设置--  
  54. set showcmd            " 命令行显示输入的命令  
  55. set showmode        " 命令行显示vim当前模式  
  56.   
  57. "--find setting--  
  58. set incsearch        " 输入字符串就显示匹配点  
  59. set hlsearch         
保存.vimrc之后,重新进入vim,打开一个源文件(如.cc文件,.h文件)是不是有所不同了?

四、vim常见的插件使用

      vim插件我觉得是vim的精华所在,vim很多优秀的功能都是通过vim的插件来实现的。其实vim插件貌似是一套自己的语言,通过这个语言来协同工作,下面我就说我所常用的插件吧~

      所有插件都可以在www.vim.org上面下到

    4.1  ctags的使用

             首先需要说明的是ctags不是vim 的插件,只是一个软件,用它来生成源码的信息--即下面所属的标签索引。

            ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形

           首先先安装ctags:在终端输入sudo apt-get install ctags即可(PS:博主用的是ubuntu系统),接着就是生成tags文件。进入到对应的源码目录,具体到我,有三个目录分别是/home/helloworld/ns-allinone-2.30/ns-2.30、/usr/include/c++/4.3和/home/helloworld/cpp_src,分别是我经常工作的ns2的目录,C++库的目录以及C++中的STL的目录(貌似没有的话也没什么关系),然后再终端输入ctags -R *即可发现对应的目录下多了个tags文件,如(这里只给出了在ns目录下生成tags文件的例子)

[plain] view plaincopy
  1. helloworld@ubuntu:~/ns-allinone-2.30/ns-2.30$ ctags -R *  
  2. helloworld@ubuntu:~/ns-allinone-2.30/ns-2.30$ ls -l tags  
  3. -rw-r--r-- 1 helloworld helloworld 2380816 2013-05-31 17:20 tags  

             然后在.vimrc中添加以下配置信息: 

[plain] view plaincopy
  1. "--ctags setting--  
  2. " 按下F5重新生成tag文件,并更新taglist  
  3. map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>  
  4. imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>  
  5. set tags=tags  
  6. set tags+=./tags "add current directory's generated tags file  
  7. set tags+=/usr/include/c++/4.3/tags   
  8. set tags+=~/ns-allinone-2.30/ns-2.30/tags  
  9. set tags+=~/cpp_src/tags  
其中前两行是按下F5键自动更新tag文件,后面set tags开头的几行是设置tags文件(这里应该根据自己的情况来设置),保存.vimrc退出即可。然后随便打开一个文件,比如说我打开的是mac-gprs.cc文件,光标停在MacGprs下,按下ctrl+]就可以跳到MacGprs的定义或者构造函数处,根据自己的需要选择即可。下面这一段来自其他博客:

tag命令用法:
Ctrl+]  跳到当前光标下单词的标签
Ctrl+O  返回上一个标签
Ctrl+T  返回上一个标签
:tag TagName 跳到TagName标签
以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以使用以下命令:
:stag TagName 新窗口显示TagName标签,光标跳到标签处
Ctrl+W + ]  新窗口显示当前光标下单词的标签,光标跳到标签处
当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),":tags" 命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
可以用这些命令在各匹配的标签间移动:
:tfirst    到第一个匹配
:[count]tprevious 向前 [count] 个匹配
:[count]tnext  向后 [count] 个匹配
:tlast    到最后一个匹配
或者使用以下命令选择要跳转到哪一个
:tselect TagName
输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号 (在第一列)。其它列的信息可以让你知道标签在何处被定义过。
以下命令将在预览窗口显示标签
:ptag TagName 预览窗口显示TagName标签,光标跳到标签处
Ctrl+W + }  预览窗口显示当前光标下单词的标签,光标跳到标签处
:pclose   关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。 

       4.2 vim自动补全——OmniCppComplete

         其实我觉得这个挺不好用的。。。不过貌似网上都很推荐这个,先装上吧,后面会有更好用的补全工具。

         功能:根据tags文件来进行补全

          安装:去www.vim.org中搜索omnicppcomplete可以得到一个zip文件,将这个zip文件放在.vim文件夹下解压即可。

         .vimrc配置如下:

[plain] view plaincopy
  1. "-- omnicppcomplete setting --  
  2. " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码  
  3. imap <F3> <C-X><C-O>  
  4. " 按下F2根据头文件内关键字补全  
  5. imap <F2> <C-X><C-I>  
  6. set completeopt=menu,menuone " 关掉智能补全时的预览窗口  
  7. let OmniCpp_MayCompleteDot = 1 " autocomplete with .  
  8. let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->  
  9. let OmniCpp_MayCompleteScope = 1 " autocomplete with ::  
  10. let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)  
  11. let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files  
  12. let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window  
  13. let OmniCpp_GlobalScopeSearch=1 " enable the global scope search  
  14. let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members  
  15. "let OmniCpp_DefaultNamespaces=["std"]  
  16. let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column  
  17. let OmniCpp_ShowAccess=1   

OmniCppComplete是基于ctags数据库即tags文件实现的(基于ctags生成的索引信息来实现自动补全的),所以在ctags -R生成tags时还需要一些额外的选项,这样生成的tags文件才能与OmniCppComplete配合运作。使用下列命令生成tags文件,就可以与OmniCppComplete配合运作:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
--c++-kinds=+p  : 为C++文件增加函数原型的标签
--fields=+iaS   : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
--extra=+q      : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全

所以我们需要用ctags命令加上以上参数后重新在对应的源目录中生成tags文件。


关于omnicppcomplete,以下的来自其他blog(不过我觉得不是很好用)。

注意:在自动补全的点,Vim必须知道可能补全的定义。比如说,在namespace std命名空间下的变量和函数,必须要用using namespace std;暴露出来,否则是不能补全的。在.cpp文件中还可以,在.h文件中这样就不是好的做法了。暂时不知道这个问题是由于我自己配置错误还是程序没有实现。
当自动补全下拉窗口弹出后,一些可用的快捷键:
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  拼写建议
帮助文档
:help omnicppcomplete
       4.3 taglist插件
       功能:Taglist用于列出了当前文件中的所有标签(宏, 全局变量, 函数名等)
       安装:去www.vim.org中搜索taglist可以得到一个zip文件,将这个zip文件放在.vim文件夹下解压即可。
       .vimrc配置信息:
[plain] view plaincopy
  1. "-- Taglist setting --  
  2. let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行  
  3. let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边  
  4. let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表  
  5. let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏  
  6. let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim  
  7. "是否一直处理tags.1:处理;0:不处理  
  8. let Tlist_Process_File_Always=1 "实时更新tags  
  9. let Tlist_Inc_Winwidth=0  
       用法:进入vim后用命令":Tlist"打开/关闭taglist窗口
      4.4 插件WinManager
       功能:WinManager用于管理文件浏览器和缓冲区(buffer),这里主要用其来管理taglist插件和vim自带的文件浏览器netrw。
       安装:去www.vim.org中搜索WinManager可以得到一个zip文件,将这个zip文件放在.vim文件夹下解压即可。
       .vimrc配置信息:
[plain] view plaincopy
  1. "-- WinManager setting --  
  2. let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件  
  3. "let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim  
  4. nmap wm :WMToggle<cr>  
   用法:
:WMToggle 打开/关闭WinManage,不过我们在配置文件.vimrc中做了快捷键映射,所以直接按wm就可以打开/关闭WinManage
文件浏览器命令(在文件浏览器窗口中使用)
<enter>或双击  如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
<tab>   如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件
<F5> 刷新列表
-  返回上一层目录
c  使浏览目录成为vim当前工作目录
d  创建目录
D  删除当前光标下的目录或文件
i  切换显示方式
R  文件或目录重命名
s  选择排序方式
r  反向排序列表
x  定制浏览方式, 使用你指定的程序打开该文件
winmanager帮助文档
:help winmanager
netrw帮助文档
:help netrw
       4.5 插件MiniBufferExplorer
       功能:MiniBufferExplorer用于浏览和管理buffer,如果只打开一个文件,是不会显示在屏幕上的,而打开多个文件之后,会自动出现在屏幕上,其实就是我在上面贴的那张图上的多文件标签。
       安装:去www.vim.org中搜索MiniBufferExplorer下载可以得到一个.vim文件,将这个.vim文件放在.vim/plugin文件夹下即可。
       .vimrc配置信息如下:
[plain] view plaincopy
  1. " -- MiniBufferExplorer --   
  2. let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口  
  3. let g:miniBufExplMapWindowNavArrows = 1 " 按下Ctrl+箭头,可以切换到当前窗口的上下左右窗口  
  4. let g:miniBufExplMapCTabSwitchBufs = 1 " 启用以下两个功能:Ctrl+tab移到下一个buffer并在当前窗口打开;Ctrl+Shift+tab移到上一个buffer并在当前窗口打开;ubuntu好像不支持  
  5. "let g:miniBufExplMapCTabSwitchWindows = 1 " 启用以下两个功能:Ctrl+tab移到下一个窗口;Ctrl+Shift+tab移到上一个窗口;ubuntu好像不支持  
  6. let g:miniBufExplModSelTarget = 1    " 不要在不可编辑内容的窗口(如TagList窗口)中打开选中的buffer  
     用法:
<Tab>  移到上一个buffer
<Shift-Tab> 移到下一个buffer
<Enter>  打开光标所在的buffer
d   删除光标所在的buffer
      4.6 插件a.vim
      功能:在cc/h或者c/h文件之间进行切换(头文件和源文件之间进行切换)
     安装:去www.vim.org中搜索a下载可以得到一个.vim文件,将这个.vim文件放在.vim/plugin文件夹下即可。
     .vimrc配置信息:
[plain] view plaincopy
  1. "a.vim快捷键设置  
  2. nnoremap <silent> <F12> :A<CR>  
     用法:直接F12就可以打开这个cc文件所对应的h文件,很方便有木有。
     4.7 neocomplcache插
     功能:更好用的补全功能。
     安装:去www.vim.org中搜索neocomplcache下载可以得到一个.zip文件,将这个.zip文件放在~/.vim文件夹下解压即可。
     .vimrc配置文件:
[plain] view plaincopy
  1. " Disable AutoComplPop.  
  2. let g:acp_enableAtStartup = 0  
  3. " Use neocomplcache.  
  4. let g:neocomplcache_enable_at_startup = 1   
  5. " Use smartcase.  
  6. let g:neocomplcache_enable_smart_case = 1  
  7. " Use camel case completion.  
  8. let g:neocomplcache_enable_camel_case_completion = 1  
  9. " Use underbar completion.  
  10. let g:neocomplcache_enable_underbar_completion = 1  
  11. " Set minimum syntax keyword length.  
  12. let g:neocomplcache_min_syntax_length = 1  
  13. " set the max list in the popup menu. increase the speed  
  14. let g:neocomplcache_max_list=20  
  15. " Define keyword.  
  16. if !exists('g:neocomplcache_keyword_patterns')  
  17.     let g:neocomplcache_keyword_patterns = {}  
  18. endif  
  19.     let g:neocomplcache_keyword_patterns['default'] = '\h\w*'  
  20. let g:neocomplcache_auto_completion_start_length=1  
  21. " ignore letter case  
  22. let g:neocomplcache_enable_ignore_case=1  
用法:如下图所示

这里只需要按下Ctrl+N就可以从下拉框从上往下选,Ctrl+P就可以从上往下选,而且按完Ctrl+N或者Ctrl+P后不需要再次按Enter键直接输入即可。
       4.8 代码折叠
       功能:折叠用于把缓冲区内某一范围内的文本行显示为屏幕上的一行。
       安装:无须安装,vim自带功能。
       .vimrc配置信息:
[plain] view plaincopy
  1. "--fold setting--  
  2. set foldmethod=syntax " 用语法高亮来定义折叠  
  3. set foldlevel=100 " 启动vim时不要自动折叠代码  
  4. set foldcolumn=5 " 设置折叠栏宽度  
     用法:
折叠级别foldlevel
'foldlevel' 是个数值选项:数字越大则打开的折叠更多。
当 'foldlevel' 为 0 时,所有的折叠关闭。
当 'foldlevel' 为正数时,一些折叠关闭。
当 'foldlevel' 很大时,所有的折叠打开。
折叠栏foldcolumn
'foldcolumn' 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。
一个打开的折叠由一栏来表示,顶端是 '-',其下方是 '|'。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。
一个关闭的折叠由 '+' 表示。
当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别。
在折叠栏点击鼠标,可以打开和关闭折叠:

- 点击 '+' 打开在这行的关闭折叠
- 在任何其他非空字符上点击,关闭这行上的打开折叠
za  打开/关闭在光标下的折叠
zA  循环地打开/关闭光标下的折叠
zo  打开 (open) 在光标下的折叠
zO  循环打开 (Open) 光标下的折叠
zc  关闭 (close) 在光标下的折叠
zC  循环关闭 (Close) 在光标下的所有折叠
zM  关闭所有折叠
zR  打开所有的折叠
帮助文档
:help usr_28.txt
:help fold.txt
       4.9 括号自动补全
        功能:括号自动补全
        插件:无
        .vimrc配置信息:
[plain] view plaincopy
  1. "括号自动补全  
  2. :inoremap ( ()<ESC>i  
  3. :inoremap ) <c-r>=ClosePair(')')<CR>  
  4. :inoremap { {<CR>}<ESC>O  
  5. :inoremap } <c-r>=ClosePair('}')<CR>  
  6. :inoremap [ []<ESC>i  
  7. :inoremap ] <c-r>=ClosePair(']')<CR>  
  8. :inoremap " ""<ESC>i  
  9. :inoremap ' ''<ESC>i  
  10. function ClosePair(char)  
  11.   if getline('.')[col('.') - 1] == a:char  
  12.       return "/<Right>"  
  13.   else  
  14.       return a:char  
  15.   endif  
  16. endfunction  
        4.10 C++ 懒人利器:cvim插件
        功能:主要是在编辑C++/C文件时能够模块化地输入
       安装:去www.vim.org中搜索cvim下载可以得到一个.zip文件,将这个.zip文件放在~/.vim文件夹下解压即可。
       .vimrc配置信息:无
       用法:参考http://www.thegeekstuff.com/2009/01/tutorial-make-vim-as-your-cc-ide-using-cvim-plugin/


0 0
原创粉丝点击