MyException - 我的异常网
当前位置:我的异常网» Linux/Unix » vim IDE平台-制作属于自己的配置

vim IDE平台-制作属于自己的配置

www.MyException.Cn  网友分享于:2015-08-24  浏览:0次
vim IDE平台-打造属于自己的配置

vim IDE平台-打造属于自己的配置

一、前言

        目前工作环境基本以Linux为主,自然用到VIM也很多,很早就对如何提高VIM的使用效率有所研究,限于时间关系,也没做个系统记录和资料积累,时间久了又容易忘,好久没写文档了,算是对自己一个交代。本文所涉及的配置和插件在附件中有下载。

二、环境

     开篇之前,有必要交代一下系统环境和常用软件版本。

    操作系统: centos 6.2,2.6.32-431.el6.i686

    git 版本: 3.2.29

    yum版本: 1.8

    vim版本 : 7.2.411

 

三、vim配置

3.1 基本配置

    包括一些基本的语法,缩进,代码折叠,高亮模式,窗口分割等,具体如下:

syn on              " 打开语法高亮
set expandtab    " 转义tab,当写python代码时很有用
set tabstop=4       " 设置tab键的宽度
set softtabstop=4
set backspace=2     " 设置退格键可用
set smartindent     " 智能对齐方式
set shiftwidth=4    " 换行时行间交错使用4个空格
set autoindent      " 自动对齐
set cindent         "设置C/C++缩进方式
"set ai!             " 设置自动缩进

set nu!             " 显示行号
set linebreak       " 整词换行
set whichwrap=b,s,<,>,[,]       " 光标从行首和行末时可以跳到另一行去
set autochdir                   " 自动设置目录为正在编辑的文件所在的目录
set hidden          " 没有保存的缓冲区可以自动被隐藏

set scrolloff=5

"--------------------------------------------------------------------------------

" 查找/替换相关的设置

"--------------------------------------------------------------------------------

set hlsearch        " 高亮显示搜索结果

set incsearch       " 查询时非常方便,如要查找book单词,当输入到/b时,会自动找到

                    " 第一个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的

                    " 单词,依次类推,进行查找时,使用此设置会快速找到答案,当你

                    " 找要匹配的单词时,别忘记回车

set gdefault        " 替换时所有的行内匹配都被替换,而不是只有第一个


set showmatch       " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号

colorscheme desert  "设置颜色模式

"--------------------------------------------------------------------------------

" 代码折叠

"--------------------------------------------------------------------------------

set foldmethod=syntax

set foldlevel=100       " Don't autofold anything (but I can still fold manually)

"set foldopen-=search   " don't open folds when you search into them

"set foldopen-=undo     " don't open folds when you undo stuff

"set foldcolumn=4

" 窗口操作的快捷键

"--------------------------------------------------------------------------------
"  垂直分割当前窗口
nmap wv     <C-w>v    
 " 关闭当前窗口
nmap wc     <C-w>c     
" 水平分割当前窗口
nmap ws     <C-w>s     
View Code

3.2 插件管理

         前期基本对VIM插件未进行管理,导致所有的插件都集中在.vim目录下,这对于删除一个插件来说还是比较麻烦的,目前管理vim插件的工具有几个,比较出名的如pathogen和vundle这两类,这两个插件各有优势,应用领域有所不同,关键区别如下:

        pathogen: 解决多插件文件分散问题, 集中管理插件目录,增加,删除插件都很方便,

        vundle: 解决自动搜索和下载插件问题, 方便插件的安装和更新,使插件能够时刻保持与线上版本一致

3.2.1 pathogen的安装与配置

1) 下载:git clone https://github.com/tpope/vim-pathogen

2)  在.vim目录下新建 autoload和bundle目录

3) 将下载的pathogen包中的pathogen.vim拷贝到~/.vim/autoload

4)  配置pathogen: 在~/.vimrc中配置如下一句:

call pathogen#infect()

注意:此句一定要配置再filetype plugin on 之前

5) 作用:配好后,pathogen会自动加载位于bundle目录下的所有插件

 

3.2.2 vundle配置

 1) 下载:git clone https://github.com/gmarik/vundle.git

2) 安装:将其复制到~/.vim/bundle目录

3) 配置:

    set nocompatible               " be iMproved
     filetype off                   " required!       /**  从这行开始,vimrc配置 **/

     set rtp+=~/.vim/bundle/vundle/
     call vundle#rc()

     " let Vundle manage Vundle
     " required! 
     Bundle 'gmarik/vundle'

    
     "  Github上非vim-scripts仓库插件格式(github用户名/插件名)
     Bundle 'tpope/vim-fugitive'    
     Bundle 'tpope/vim-rails.git'

    " Github vim-scripts仓库插件格式
     Bundle 'python.vim'
   
     " 非上述两种模式
     Bundle 'git://git.wincent.com/command-t.git'
     " ... 

     filetype plugin indent on  " 必须有这句

 

 

四 、其它插件安装

4.1 Taglist

作用:显示文件变量、宏、函数等tag,  以tags文件为基础,结合ctags软件使用

下载:http://sourceforge.net/projects/vim-taglist/files/vim-taglist/

安装:直接拷贝vim-taglist目录到~/.vim/bundle

配置:

"--------------------------------------------------------------------------------

" TagList :Tlist

"--------------------------------------------------------------------------------

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow = 1

"let Tlist_Use_Right_Window=1

效果截图:

 

4.2 winmanager

作用:规划布局各插件在vim中的显示,使其显示分明

下载:http://www.vim.org/scripts/script.php?script_id=95

安装:解压目录放到~/.vim/bundle下

配置:

"--------------------------------------------------------------------------------

" WinManager :WMToggle

"--------------------------------------------------------------------------------

let g:winManagerWindowLayout='FileExplorer|TagList'


"是nomal模式的命令,不是Ex模式的

nmap wm :WMToggle<cr>  "快捷键

使用: 直接在vim命令行模式输入WMToggle即可显示winmanager布局,再次输入WMToggle即可关闭布局

效果图:

 

4.3 MiniBufExplorer

作用:显示打开的文件标签栏,即类似于tab效果,方便文件间切换

下载: http://www.vim.org/scripts/script.php?script_id=159

安装:直接将下载文件解压放至~/.vim/bundle

配置:

"--------------------------------------------------------------------------------

" MiniBufExp

"--------------------------------------------------------------------------------

let g:miniBufExplMapWindowNavArrows = 1  “按左右箭头切换文件标签,再按enter键即可打开选择的文件标签

let g:miniBufExplMapCTabSwitchBufs = 1   "按Tab键也可达到切换效果

使用: 当打开winmanger布局时,用ctrl+w+w命令进入FileExplorer窗口, 按上下选择键选择文件回车打开,即可再miniBufExplorer窗口显示打开的文件标签.

效果:如winmanager截图,最上面的小窗口所示,同时打开了3个文件

4.4 grep.vim

作用:类似于grep功能,查找关键字

下载: http://www.vim.org/scripts/script.php?script_id=311

安装: 解压目录至~/.vim/bundle

配置:

"直接按下<F3>键来查找光标所在的字符串

nnoremap <silent> <F3> :Rgrep<CR>

使用: 移动光标至关键字处,按F3,会在vim命令行处显示查找相关关键字的提示,按enter键进入查找,然后选择查找目录,默认是当前目录,按回车后会出现查找模式,默认为*,即只要包含此管键字的文件行都会被查找出来,要退出查找过程也很简单,按ESC键即可。

效果如下:如要查找about_pages关键字,鼠标移动到该处,会作相应的提示,最后一张是查找结果图

 

4.5 a.vim

作用:头文件和源文件快速切换,这对于C/C++项目来说还是很方便的

下载: http://www.vim.org/scripts/script.php?script_id=31

安装: 解压目录至 ~/.vim/bundle

配置:

nnoremap <silent> <F12> :A<CR>

使用: 按F12键则可在源文件和头文件之间切换

 

4.6 omnicppcomplete

作用: 智能C/C++库补全, 为了使用此控件,还要下载专门的C++源库文件,同时得先安装好ctags软件以便生成tags文件

下载:

#omnicomplete下载
http://www.vim.org/scripts/script.php?script_id=1520

#文件结构类似于
|--omnicppcomplete

|---after
|    |---ftplugin |---autoload
|    |---omni
|    |   |---common
|    |   |---cpp
|---doc
#C
++源库下载
http://www.vim.org/scripts/script.php?script_id=2358

 

安装:

1) 对于omnicppcomplete, 解压文件到~/.vim,  有after、autoload、doc三个目录, autoload下有omni子目录,注意使用bundle来管理时,如果将包解压在~/.vim/bundle下时会识别不到,omni补全将失效;

2) 对于源码,将其解压到指定目录,如/usr/local/cpp_src, 进入该目录,执行ctags命令生成tags文件,具体如下:

cd /usr/local/cpp_src
tar -jxvf cpp_src.tar.bz2
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . #不能简单的执行ctags -R, 需要带参数才能识别C++库
move tags cpp  #重命名,非必须为区别起见

 

配置:

set completeopt=longest,menu    " 关掉智能补全时的预览窗口

filetype plugin indent on       " 加了这句才可以用智能补全

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 files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
"默认以std 命名空间为准, using namespace std
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]  
"加载CPP库tags文件
set tags+=/usr/local/cpp_src/cpp

使用效果如下图:

 

4.7 cscope

作用: 此插件作用相信用过的人谁用谁知道,windows下有SourceInsights, Linux 下也有Cscope来撑腰,通过它可以方便的查看函数定义及其函数调用关系

安装:http://cscope.sourceforge.net/,  下载源码包,编译安装,由于现在vim7.2已经集成有cscope,所以如果vim版本是7以上的话就不用安装了,同时为方便操作,cscope提供了大量的快捷键来操作以提高操作效率,快捷键映射需借助cscope_maps.vim插件,下载地址:在vim.org上有,可自行网上下载,下载后直接安装在~/.vim/bundle/cscope下

配置:

 

"--------------------------------------------------------------------------------

" cscope

"--------------------------------------------------------------------------------

cs add /home/src/cscope.out /home/src

:set cscopequickfix=s-,c-,d-,i-,t-,e-

:set cscopetag

" 按下面这种组合键有技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪

" 就回到nomal状态了

" <C-_>s的按法是先按"Ctrl+Shift+-",然后很快再按"s"

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<cr><cr> :cw<cr>  "查找C代码符号

nmap <C-_>g :cs find g <C-R>=expand("<cword>")<cr><cr> :cw<cr>  "查找本定义

nmap <C-_>c :cs find c <C-R>=expand("<cword>")<cr><cr> :cw<cr>   "查找调用本函数的函数

nmap <C-_>t :cs find t <C-R>=expand("<cword>")<cr><cr> :cw<cr>   "查找本字符串

nmap <C-_>e :cs find e <C-R>=expand("<cword>")<cr><cr> :cw<cr>    "查找本egrep模式

nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<cr><cr>    "查找本文件

nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<cr><cr> :cw<cr>  "查找包含本文件的文件

nmap <C-_>d :cs find d <C-R>=expand("<cword>")<cr><cr> :cw<cr>  " 查找本函数调用函数

 

使用:

1) 先生成cscope数据库文件,如在/home/src/下,执行 cscope -Rbq, 即可生成cscope.out文件

2)配置:然后可像上述配置一样将cscope.out文件加载到vimrc中,也可手动加载,执行: cs add cscope.out /home/src

3)快捷键: 将光标移至函数名称处,先按ctrl+下划线,再快速按相应字母即可实现相应的查找功能。

 

4.8 其它插件

    还有一些其它插件,根据需求来安装,如markdown,python, emmet等,这些直接下载相应文件到bundle目录即可,markdown还需要一些配置,可参考附件vimrc文件

五、总结

      终于总结完了,在用vim的过程中,遇到很多问题,虽然用了很久,但深知还有很多功能尚未用到,还有待挖掘,只能不断学习总结。

六、附件

6.1 vimrc

call pathogen#infect()
set expandtab
set tabstop=4       " 设置tab键的宽度
set softtabstop=4
set shiftwidth=4
set backspace=2     " 设置退格键可用

set nu!             " 显示行号


set linebreak       " 整词换行

set whichwrap=b,s,<,>,[,]       " 光标从行首和行末时可以跳到另一行去



set autochdir                   " 自动设置目录为正在编辑的文件所在的目录

set hidden          " 没有保存的缓冲区可以自动被隐藏

set scrolloff=5



"--------------------------------------------------------------------------------

" 查找/替换相关的设置

"--------------------------------------------------------------------------------

set hlsearch        " 高亮显示搜索结果

set incsearch       " 查询时非常方便,如要查找book单词,当输入到/b时,会自动找到

                    " 第一个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的

                    " 单词,依次类推,进行查找时,使用此设置会快速找到答案,当你

                    " 找要匹配的单词时,别忘记回车

set gdefault        " 替换时所有的行内匹配都被替换,而不是只有第一个



"--------------------------------------------------------------------------------

" 状态栏相关的设置

"--------------------------------------------------------------------------------

set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]

set laststatus=2    " always show the status line

set ruler           " 在编辑过程中,在右下角显示光标位置的状态行



"--------------------------------------------------------------------------------

" 编程相关的设置

"--------------------------------------------------------------------------------

set completeopt=longest,menu    " 关掉智能补全时的预览窗口

filetype plugin indent on       " 加了这句才可以用智能补全

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 files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]

"set tags=./tags
"set tags+=/usr/include/c++/tags
set tags+=/usr/local/cpp_src/cpp

syn on              " 打开语法高亮

set showmatch       " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号

set smartindent     " 智能对齐方式

set shiftwidth=4    " 换行时行间交错使用4个空格

set autoindent      " 自动对齐

set cindent         "设置C/C++缩进方式
"set ai!             " 设置自动缩进

colorscheme desert



"--------------------------------------------------------------------------------

" 代码折叠

"--------------------------------------------------------------------------------

set foldmethod=syntax

set foldlevel=100       " Don't autofold anything (but I can still fold manually)

"set foldopen-=search   " don't open folds when you search into them

"set foldopen-=undo     " don't open folds when you undo stuff

"set foldcolumn=4

" 窗口操作的快捷键

"--------------------------------------------------------------------------------
"  垂直分割当前窗口
nmap wv     <C-w>v    
 " 关闭当前窗口
nmap wc     <C-w>c     
" 水平分割当前窗口
nmap ws     <C-w>s     

"###############################################################################

" The following is the Plugins' setting

"###############################################################################


"--------------------------------------------------------------------------------

" TagList :Tlist

"--------------------------------------------------------------------------------

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow = 1

"let Tlist_Use_Right_Window=1



"--------------------------------------------------------------------------------

" netrw 文件浏览器 :e <PATH>

"--------------------------------------------------------------------------------

"let g:netrw_winsize = 30       " 浏览器宽度

"--------------------------------------------------------------------------------

" QuickFix

"--------------------------------------------------------------------------------
" 切换到下一个结果
nmap <F6> :cn<cr>  
 " 切换到上一个结果
nmap <F7> :cp<cr>   



"--------------------------------------------------------------------------------

" WinManager :WMToggle

"--------------------------------------------------------------------------------

let g:winManagerWindowLayout='FileExplorer|TagList'


"是nomal模式的命令,不是Ex模式的

nmap wm :WMToggle<cr> 


"--------------------------------------------------------------------------------

" MiniBufExp

"--------------------------------------------------------------------------------


let g:miniBufExplMapWindowNavArrows = 1

let g:miniBufExplMapCTabSwitchBufs = 1




"--------------------------------------------------------------------------------

" cscope

"--------------------------------------------------------------------------------

cs add /home/src/cscope.out /home/src

:set cscopequickfix=s-,c-,d-,i-,t-,e-

:set cscopetag

" 按下面这种组合键有技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪

" 就回到nomal状态了

" <C-_>s的按法是先按"Ctrl+Shift+-",然后很快再按"s"

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>g :cs find g <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>c :cs find c <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>t :cs find t <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>e :cs find e <C-R>=expand("<cword>")<cr><cr> :cw<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> :cw<cr>

nmap <C-_>d :cs find d <C-R>=expand("<cword>")<cr><cr> :cw<cr>



"--------------------------------------------------------------------------------

" Grep

"--------------------------------------------------------------------------------

"直接按下<F3>键来查找光标所在的字符串

nnoremap <silent> <F3> :Rgrep<CR>



"--------------------------------------------------------------------------------

" A

"--------------------------------------------------------------------------------

nnoremap <silent> <F12> :A<CR>




" NERD_commenter

"--------------------------------------------------------------------------------

let NERD_c_alt_style = 1    " 将C语言的注释符号改为//, 默认是/**/

"nmap <F5> ,cc



"--------------------------------------------------------------------------------

" SuperTab :SuperTabHelp

"--------------------------------------------------------------------------------

let g:SuperTabRetainCompletionType = 2

let g:SuperTabDefaultCompletionType = "<C-X><C-O>"


"--------------------------------------------------------------------------------

" CVim :help csupport

"--------------------------------------------------------------------------------

let g:C_Comments = "no"         " 用C++的注释风格

let g:C_BraceOnNewLine = "no"   " '{'是否独自一行

let g:C_AuthorName = "Wen Qiuliang"

let g:C_Project="F9"

let g:C_TypeOfH = "c"           " *.h文件的文件类型是C还是C++

let g:user_emmet_settings = {
  \  'php' : {
  \    'extends' : 'html',
  \    'filters' : 'c',
  \  },
  \  'xml' : {
  \    'extends' : 'html',
  \  },
  \  'haml' : {
  \    'extends' : 'html',
  \  },
  \}

" vim markdown config
au BufRead,BufNewFile *.{md,mdown,mkd,mkdn,markdown,mdwn} set filetype=mkd
let g:vim_markdown_folding_disabled=1
let g:vim_markdown_frontmatter=1
View Code

6.2  插件

    本文所涉及的所有插件都上传在github中,地址如下:

https://git.oschina.net/ballwql/vim-plugin.git

 

 

文章评论

程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
一个程序员的时间管理
一个程序员的时间管理
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
我是如何打败拖延症的
我是如何打败拖延症的
总结2014中国互联网十大段子
总结2014中国互联网十大段子
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
代码女神横空出世
代码女神横空出世
程序员的鄙视链
程序员的鄙视链
鲜为人知的编程真相
鲜为人知的编程真相
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员和编码员之间的区别
程序员和编码员之间的区别
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员必看的十大电影
程序员必看的十大电影
如何成为一名黑客
如何成为一名黑客
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
我的丈夫是个程序员
我的丈夫是个程序员
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员都该阅读的书
程序员都该阅读的书
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
Java程序员必看电影
Java程序员必看电影
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员应该关注的一些事儿
程序员应该关注的一些事儿
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
漫画:程序员的工作
漫画:程序员的工作
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
中美印日四国程序员比较
中美印日四国程序员比较
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
10个调试和排错的小建议
10个调试和排错的小建议
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有