VI--插件的使用

来源:互联网 发布:angularjs.min.js.map 编辑:程序博客网 时间:2024/06/10 23:22

前言:貌似时隔上一篇博客已经过了很久了,这里再写一下关于vi(vim,gvim)的配置

一、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文件中进行相应的配置才能更好的工作)。

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

helloworld@ubuntu:~/ns-allinone-2.30/ns-2.30$ ctags -R *helloworld@ubuntu:~/ns-allinone-2.30/ns-2.30$ ls -l tags-rw-r--r-- 1 helloworld helloworld 2380816 2013-05-31 17:20 tags


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

"--ctags setting--" 按下F5重新生成tag文件,并更新taglistmap <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>set tags=tagsset tags+=./tags "add current directory's generated tags fileset tags+=/usr/include/c++/4.3/tags set tags+=~/ns-allinone-2.30/ns-2.30/tagsset 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配置如下:

"-- omnicppcomplete setting --" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码imap <F3> <C-X><C-O>" 按下F2根据头文件内关键字补全imap <F2> <C-X><C-I>set completeopt=menu,menuone " 关掉智能补全时的预览窗口let OmniCpp_MayCompleteDot = 1 " autocomplete with .let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->let OmniCpp_MayCompleteScope = 1 " autocomplete with ::let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included fileslet OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup windowlet OmniCpp_GlobalScopeSearch=1 " enable the global scope searchlet OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members"let OmniCpp_DefaultNamespaces=["std"]let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last columnlet 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配置信息:
"-- Taglist setting --let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim"是否一直处理tags.1:处理;0:不处理let Tlist_Process_File_Always=1 "实时更新tagslet Tlist_Inc_Winwidth=0


用法:进入vim后用命令":Tlist"打开/关闭taglist窗口

     4.4 插件WinManager
       功能:WinManager用于管理文件浏览器和缓冲区(buffer),这里主要用其来管理taglist插件和vim自带的文件浏览器netrw。
      安装:去www.vim.org中搜索WinManager可以得到一个zip文件,将这个zip文件放在.vim文件夹下解压即可。
       .vimrc配置信息:
"-- WinManager setting --let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件"let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vimnmap 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配置信息如下:
" -- MiniBufferExplorer -- let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口let g:miniBufExplMapWindowNavArrows = 1 " 按下Ctrl+箭头,可以切换到当前窗口的上下左右窗口let g:miniBufExplMapCTabSwitchBufs = 1 " 启用以下两个功能:Ctrl+tab移到下一个buffer并在当前窗口打开;Ctrl+Shift+tab移到上一个buffer并在当前窗口打开;ubuntu好像不支持"let g:miniBufExplMapCTabSwitchWindows = 1 " 启用以下两个功能:Ctrl+tab移到下一个窗口;Ctrl+Shift+tab移到上一个窗口;ubuntu好像不支持let g:miniBufExplModSelTarget = 1    " 不要在不可编辑内容的窗口(如TagList窗口)中打开选中的buffer

用法:
<Tab> 移到上一个buffer
<Shift-Tab> 移到下一个buffer
<Enter> 打开光标所在的buffer
删除光标所在的buffer
     4.6 插件a.vim
      功能:在cc/h或者c/h文件之间进行切换(头文件和源文件之间进行切换)
     安装:去www.vim.org中搜索a下载可以得到一个.vim文件,将这个.vim文件放在.vim/plugin文件夹下即可。
     .vimrc配置信息:
用法:
<Tab> 移到上一个buffer
<Shift-Tab> 移到下一个buffer
<Enter> 打开光标所在的buffer
删除光标所在的buffer
     4.6 插件a.vim
      功能:在cc/h或者c/h文件之间进行切换(头文件和源文件之间进行切换)
     安装:去www.vim.org中搜索a下载可以得到一个.vim文件,将这个.vim文件放在.vim/plugin文件夹下即可。
     .vimrc配置信息:
用法:
<Tab> 移到上一个buffer
<Shift-Tab> 移到下一个buffer
<Enter> 打开光标所在的buffer
删除光标所在的buffer
     4.6 插件a.vim
      功能:在cc/h或者c/h文件之间进行切换(头文件和源文件之间进行切换)
     安装:去www.vim.org中搜索a下载可以得到一个.vim文件,将这个.vim文件放在.vim/plugin文件夹下即可。
     .vimrc配置信息:
用法:
<Tab> 移到上一个buffer
<Shift-Tab> 移到下一个buffer
<Enter> 打开光标所在的buffer
删除光标所在的buffer
     4.6 插件a.vim
      功能:在cc/h或者c/h文件之间进行切换(头文件和源文件之间进行切换)
     安装:去www.vim.org中搜索a下载可以得到一个.vim文件,将这个.vim文件放在.vim/plugin文件夹下即可。
     .vimrc配置信息:
"a.vim快捷键设置nnoremap <silent> <F12> :A<CR>


用法:直接F12就可以打开这个cc文件所对应的h文件,很方便有木有。

     4.7 neocomplcache插
     功能:更好用的补全功能。
     安装:去www.vim.org中搜索neocomplcache下载可以得到一个.zip文件,将这个.zip文件放在~/.vim文件夹下解压即可。
     .vimrc配置文件:
" Disable AutoComplPop.let g:acp_enableAtStartup = 0" Use neocomplcache.let g:neocomplcache_enable_at_startup = 1 " Use smartcase.let g:neocomplcache_enable_smart_case = 1" Use camel case completion.let g:neocomplcache_enable_camel_case_completion = 1" Use underbar completion.let g:neocomplcache_enable_underbar_completion = 1" Set minimum syntax keyword length.let g:neocomplcache_min_syntax_length = 1" set the max list in the popup menu. increase the speedlet g:neocomplcache_max_list=20" Define keyword.if !exists('g:neocomplcache_keyword_patterns')let g:neocomplcache_keyword_patterns = {}endiflet g:neocomplcache_keyword_patterns['default'] = '\h\w*'let g:neocomplcache_auto_completion_start_length=1" ignore letter caselet g:neocomplcache_enable_ignore_case=1

用法:如下图所示


这里只需要按下Ctrl+N就可以从下拉框从上往下选,Ctrl+P就可以从上往下选,而且按完Ctrl+N或者Ctrl+P后不需要再次按Enter键直接输入即可。
       4.8 代码折叠
       功能:折叠用于把缓冲区内某一范围内的文本行显示为屏幕上的一行。
       安装:无须安装,vim自带功能。
       .vimrc配置信息:
"--fold setting--set foldmethod=syntax " 用语法高亮来定义折叠set foldlevel=100 " 启动vim时不要自动折叠代码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配置信息:
"括号自动补全:inoremap ( ()<ESC>i:inoremap ) <c-r>=ClosePair(')')<CR>:inoremap { {<CR>}<ESC>O:inoremap } <c-r>=ClosePair('}')<CR>:inoremap [ []<ESC>i:inoremap ] <c-r>=ClosePair(']')<CR>:inoremap " ""<ESC>i:inoremap ' ''<ESC>ifunction ClosePair(char)  if getline('.')[col('.') - 1] == a:char      return "/<Right>"  else      return a:char  endifendfunction


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/

http://blog.csdn.net/wuxuguang123/article/details/8130081

0 0
原创粉丝点击