vim配置研究--一步一步搞vim配置

    所谓工欲善其事必先利其器,之前在实验室干活或者学习主要以java或者简单的C为开发语言,开发工具主要以Eclipse和VC++ 6.0为主,进入公司后转战Linux,以C++语言为主,选择了VIM作为开发工具,用过一段时间之后总是感觉不顺手,于是决心整顿一下,下面开始我的研究之旅。

1.      前期准备

a)         说明:由于我使用的为linux系统,版本号为10.04,后面的配置在此系统下可用。

b)         安装vim:sudo apt-get install vim-full

c)         安装一份vim中文文档

对于英文比较挫的我,一份中文文档还是非常有必要的。方法到http://vimcdoc.sourceforge.net/下载或者在我的空间内下载。我下载的是vimcdoc-1.8.0.tar.gz,拷贝到系统任意目录下解压后执行vimcdoc.sh -i

d)         既然是对vim进行配置,就要知道其配置文件存在什么地方。vim的配置文件存在于/etc/vim/vimrc和~/.vimrc(如果没有自行创建):/etc目录下的配置是一个全局文件,会影响到系统上所有用户,一般建议修改自己目录下的.vimrc文件

2.      vim脚本学习

无论是做研究还是日常工作中,我都是抱着知其然知其所以然的态度,本次研究当然也不例外。对vim的配置实际上是有一套脚本语言控制的,和shell、python、c语言类似,包括变量定义、语句控制、函数等。

强烈建议先花上一个小时学习一下该语言,如果对C或者shell比较熟悉的话,会更容易了解。可以直接查看vim文档的第41章即在vim命令模式下执行:help vim-script-intro查看。

3.      vim配置文件下载

先提供我的配置文件以及相关插件的下载http://download.csdn.net/detail/fangqingan_java/5378097。或者在我的资源列表里面搜索vim配置文件,使用时:

a)         vimrc_fqa拷贝到~/.vimrc

b)         解压vim_fqa.zip,将.vim目录下文件拷贝到~/.vim/目录下

c)         stl_ctags拷贝到~/Base下,可以自行修改,如果修改请修改配置文件对应地方(配置文件中搜索stl_ctags

d)         拷贝vimcdoc-1.8.0.tar.gz到任意目录解压后执行vimcdoc.sh -i

以上路径如果没有自行创建。

4.      基础配置

一些实用的配置,大家可以根据需求选择使用。不想使用的功能直接在行首加引号注释掉。

"""""""""""""""""""
"实用设置
"""""""""""""""""""
" 设置当文件被改动时自动载入
set autoread
" quickfix模式
autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
"共享剪贴板  
set clipboard+=unnamed 
"从不备份  
set nobackup
"自动保存
set autowrite
set ruler                   " 打开状态栏标尺
set cursorline              " 突出显示当前行
set magic                   " 设置魔术
set guioptions-=T           " 隐藏工具栏
set guioptions-=m           " 隐藏菜单栏
" 不要使用vi的键盘模式,而是vim自己的
set nocompatible
" 去掉输入错误的提示声音
set noeb
" 在处理未保存或只读文件的时候,弹出确认
set confirm
" 自动缩进
set autoindent
set cindent
" 历史记录数
set history=1000
"禁止生成临时文件
set nobackup
set noswapfile
"搜索忽略大小写
set ignorecase
"搜索逐字符高亮
set hlsearch
set incsearch
"行内替换
set gdefault
"编码设置
"set enc=utf-8
"set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
"语言设置
"set langmenu=zh_CN.UTF-8
"set helplang=cn
" 我的状态行显示的内容(包括文件类型和解码)
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
"set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]
" 总是显示状态行
set laststatus=2
" 命令行(在状态行下)的高度,默认为1,这里是2
set cmdheight=2
" 侦测文件类型
filetype on
" 载入文件类型插件
filetype plugin on
" 为特定文件类型载入相关缩进文件
filetype indent on
" 保存全局变量
set viminfo+=!
" 带有如下符号的单词不要被换行分割
set iskeyword+=_,$,@,%,#,-
" 字符间插入的像素行数目
set linespace=0
" 增强模式中的命令行自动完成操作
set wildmenu
" 使回格键(backspace)正常处理indent, eol, start等
set backspace=2
" 允许backspace和光标键跨越行边界
"set whichwrap+=<,>,h,l
" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
set mouse=a
set selection=exclusive
set selectmode=mouse,key
" 通过使用: commands命令,告诉我们文件的哪一行被改变过
set report=0
" 在被分割的窗口间显示空白,便于阅读
"set fillchars=vert:\ ,stl:\ ,stlnc:\
" 高亮显示匹配的括号
set showmatch
" 匹配括号高亮的时间(单位是十分之一秒)
set matchtime=1
" 光标移动到buffer的顶部和底部时保持3行距离
set scrolloff=3
" 为C程序提供自动缩进
set smartindent
" 高亮显示普通txt文件(需要txt.vim脚本)
au BufRead,BufNewFile *  setfiletype txt
set nocompatible "不要vim模仿vi模式,建议设置,否则会有很多不兼容的问题
syntax on "打开高亮
set hlsearch "高亮显示结果
set incsearch "在输入要搜索的文字时,vim会实时匹配

5.      Tab的设置

为什么要单把tab的配置抽离出来呢?是因为每个公司对tab键的需求不同,例如有的公司将tab键扩展为4个空格,有的为2个空格。又如果对所有的文件都采用相同的配置又不太合适,有些配置文件还是希望有tab键的出现。

下面脚本的函数是说在执行到特殊文件类型时才将tab转换为2个空格。

" 特定文件类型,tab键转变为空格
autocmd BufEnter *.cc,*.h,*.cpp,*.sh,*.vim exec ":call SetMyTab()"
function SetMyTab()
  set smarttab  
  set tabstop=2
  set shiftwidth=2
  set softtabstop=2
  set expandtab
endfunction

6.      自动添加版权声明

先介绍一下该配置的用法:按F4键可以对各类文件添加版权声明,由于不同文件的注释是不一致的,又对文件进行了区分,对于C或者C++而言采用"//"进行注释;对于shell脚本采用"#"注释;对于vim自己的脚本采用"\""进行注释;

多次按F4键不会进行多次添加,会修改文件的修改时间一项。

另外添加了一个附属的功能,对于c++中点h文件一般要有头文件保护,自动生成头文件保护,采用路径的绝对路径或者相对路径进行保护。具体参考配置说明。

"进行版权声明的设置
"添加或更新头
map <F4> :call TitleDet()<cr>
function GetTilteHead()
let s:file_name_path=toupper(expand("%:p"))
let s:file_sub_id=1
" 修改一下8行进行头文件保护路径的截取
let s:coding_id=stridx(s:file_name_path, "CODING")
let s:trunk_id=stridx(s:file_name_path, "TRUNK")
if s:coding_id != -1
  let s:file_sub_id=s:coding_id + 7
elseif s:trunk_id != -1
  let s:file_sub_id=s:trunk_id + 6
endif
let s:file_sub_path = strpart(s:file_name_path, s:file_sub_id)
let s:file_sub_trans_1=substitute(s:file_sub_path, '/','_','g')
let s:file_sub_trans_2=substitute(s:file_sub_trans_1, '\.','_','g')
return s:file_sub_trans_2."_"
endfunction
function AddTitle()
  let s:version_pre='//'
  if &filetype == 'sh'
    let s:version_pre='#'
  elseif &filetype == 'vim'
    let s:version_pre='"'
  endif
  call append(0, s:version_pre.' Copyright (c) '. strftime("%Y"). ' xxx Inc. ALL RIGHTS RESERVED.')
  call append(1, s:version_pre.' Author: Fang Qingan(fangqingan@163.com)')
  call append(2, s:version_pre. ' Created/Modified Time: '. strftime("%c"))
  call append(3, s:version_pre. ' File Name: '.expand("%"))
  call append(4, s:version_pre. ' Description:')
  let s:file_name = expand("%:p")
  if stridx(s:file_name, "\.h") != -1
    let s:file_head=GetTilteHead()
    call append(5, '#ifndef '.s:file_head)
    call append(6, '#define '.s:file_head)
    call append(line("$"), '#endif // '.s:file_head)
  endif
  echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endfunction
"更新最近修改时间和文件名
function UpdateTitle()
  normal m'
  execute '/.*Created\/Modified Time:/s@:.*$@\=strftime(": %c")@'
  normal ''
  normal mk
  execute "noh"
  normal 'k
  echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction
"判断前10行代码里面,是否有Last modified这个单词,
"如果没有的话,代表没有添加过作者信息,需要新添加;
"如果有的话,那么只需要更新即可
function TitleDet()
  let s:n=1
  "默认为添加
  while s:n < 10
    let s:line = getline(s:n)
    if s:line =~ '^.*Created/Modified\sTime:\S*.*$'
      call UpdateTitle()
      return
    endif
    let s:n = s:n + 1
  endwhile
  call AddTitle()
endfunction

7.      Taglist、omnicppcomplete的配置

ctags、taglist、omnicppcomplete为写程序必备工具可以将函数、变量等生成tag文件展示出来,并能进行自动补全。

首先保证系统中安装了ctags,并且下载了taglist以及omnicppcomplete插件,或者按照步骤3设置了插件配置。

功能:按F3可以打开taglist,再次按关闭;支持对stl标准库的补全。

"进行Tlist的设置
"TlistUpdate可以更新tags
map <F3> :silent! Tlist<CR> "按下F3就可以呼出了
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=1 "让taglist可以同时展示多个文件的函数列表,如果想只有1个,设置为1
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
let Tlist_Process_File_Always=0 "是否一直处理tags.1:处理;0:不处理。不是一直实时更新tags,因为没有必要
let Tlist_Inc_Winwidth=0
set tags+=/home/fangqingan/Base/stl_tags  "填充stl_tags绝对路径
"代码补全
set completeopt=preview,menu 
" set for omnicppcomplete
set nocp
filetype plugin on

8.      锦上添花

Winmanager,NERDTree和MiniBufExplorer主要提供快捷的编辑功能,如定义跳转,符号查询,符号提示与补全等。这里的三个插件,主要优化布置VIm的界面。具体来说,NERDTree提供树形浏览文件系统的界面,MiniBufExplorer提供多文件同时编辑功能,而Winmanager将这NERDTree界面和Taglist界面整合起来,使Vim更像VS

" set for minibufexp
let g:miniBufExplMapWindowNavVim = 1  
let g:miniBufExplMapWindowNavArrows = 1  
let g:miniBufExplMapCTabSwitchBufs = 1  
let g:miniBufExplModSelTarget = 1 
let g:miniBufExplMoreThanOne=0
 
" set for nerdtree
let g:NERDTree_title="[NERDTree]" 
let g:winManagerWindowLayout="NERDTree|TagList" 
function! NERDTree_Start()  
    exec 'NERDTree'  
endfunction  
function! NERDTree_IsValid()  
    return 1  
endfunction  
nmap wm :WMToggle<CR>
" set for vinmanager
function! <SID>ToggleWindowsManager() 
   if IsWinManagerVisible()  
      call s:CloseWindowsManager() 
   else  
      call s:StartWindowsManager() 
      exe 'q'  
   end  
endfunction

9.      参考文件

a)     http://stevelosh.com/blog/2010/09/coming-home-to-vim/

b)     http://www.cherrot.com/2012/05/vim-configure-notes

c)      http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html

d)     http://sosowo.org/archives/tag/vim-tag--vim

e)     http://blog.csdn.net/bokee/article/details/6633193

如有时间和精力建议大家看一下配置具体含义。

有任何问题,欢迎大家拍砖。

 

本文主要介绍: vim的使用技巧、 vim配置vimrc、 vim的命令和vim的插件。 内容极其详细,且用doc文档编写,整理得整齐、美观。 [目录] vim使用进阶: 序言 本文是本系列的序言,讲述我使用vim的经历和心得,以及对vim初学者的一些建议。文中的抓图展示了我的vim使用环境。 vim使用进阶: 使用会话和viminfo 本文介绍如何使用vim的会话 (session) 和viminfo来恢复vim的使用环境。如果你需要经常恢复到相同工作环境,此功能非常有用,你不必一次次重新打开文件、设置你的工作环境。 vim使用进阶: vimrc初步 本文简要介绍了vimrc的知识以及如何使用vimrc保存vim配置。文中还提供了一些键映射(map),使用这些映射可以快速编辑和加载vimrc。关于vimrc的更多应用,参见本系列其它文章。 vim使用进阶: 保存项目相关配置 本篇主要以path选项为例,讲述如何保存和恢复项目相关的配置。在使用vim的过程中,你可能同时打开几个project,每个project的配置可能都不相同,文中介绍了两种方法来保存每个project自身的独有配置。一种是使用一个固定的vim配置脚本保存project相关的path设置、按键映射等;另外一种是利用前面文章所介绍的会话(session)机制。 vim使用进阶: 使用标签(tag)文件 本文介绍了如何使用Exuberant ctags生成tag文件以及在vim中如何使用tag文件进行跳转、查找等操作。还简要介绍了tag文件的格式,在后面介绍的Lookupfile插件中,会利用tag文件便捷的查找、打开文件。 vim使用进阶: 使用taglist插件 本文介绍如何使用taglist插件(plugin)来查看程序中的标签(tag),并介绍了taglist插件的配置和用法。taglist插件利用Exuberant ctags程序生成标签文件,并提供像Source Insight那样的标签窗口,可以方便的跳转到函数、变量等标签所在的位置。 vim使用进阶: 文件浏览和缓冲区浏览 本节介绍了如何在vim中浏览文件,以及如何查看当前打开的缓冲区。利用netrw插件,可以方便的在vim中浏览各个目录、打开指定文件,而不用切换到文件浏览器或shell;当然,netrw插件的作用并不仅仅局限于此。利用bufexplorer插件,则可以方便的查看打开的缓冲区(buffer),在缓冲区间进行切换。本文的最后介绍了winmanager插件,使用这个插件,可以把netrw插件、bufexplorer插件和taglist插件整合起来,使vim看起来更像一个集成开发环境(IDE)。 vim使用进阶: lookupfile插件 如果你在开发一个大的项目,当你想在一大堆文件中查找或者编辑指定文件时,Lookupfile插件是必不可少的。使用它,可以快速查找项目文件、可以在缓冲区查找指定文件、可以浏览指定目录等。在查找时甚至可以使用正则表达式(regex),在你只记得部分文件名或目录名时,这可是救命的手段。 vim使用进阶: 开启文件类型检测 vim最吸引人的一点是,它支持无穷多的文件类型,而且能够随意扩展。在本文主要介绍如何打开文件类型检测的功能,以及如何使用基于文件类型的插件(filetype plugin)。正因为有了文件类型检测的功能,我们才可能针对不同的类型的文件,定义不同的键映射(map)、设置不同的选项,进行语法高亮的染色(后续文章中介绍)…你可以实现任意你想实现的功能。 vim使用进阶: 乱花渐欲迷人眼 - 语法高亮 VIM并不是只有黑色两色。正相反,它提供了非常灵活的机制允许用户自定义色彩。运行在终端中的VIM,由于终端本身的限制,只能使用若干种固定的颜色;但对于GVIM来讲,你可以根据你的喜好调出任意的颜色。本文介绍的,正是vim的语法高亮功能。 vim使用进阶: 程序员的利器 - cscope 在前面的文章中介绍了利用ctags生成的tag文件,跳转到标签定义的地方。但如果想查找函数在哪里被调用,或者标签在哪些地方出现过,ctags就无能为力了,这时需要使用更为强大的cscope。本文就介绍如何使用cscope,有了它,你可以把source insight抛到一边去了。 vim使用进阶: 剑不离手 - quickfix vim由一个程序员开发,并且为更多的程序员所使用,所以vim对开发人员的强大支持,也就可以理解了。quickfix模式的引入就是一个例子。quickfix模式,是一种加速你开发的工作方式,使你不必离开vim,就可以快速的完成”编辑-编译-修正”你的程序。它不仅仅对开发人员有用,只要你的工作有类似”编辑-编译-修正”的过程,它就可以极大的简化你的工作。 vim使用进阶: 智能补全 使用过Source Insight的人一定对它的自动补全功能印象深刻,在很多的集成开发环境中,也都支持自动补全。vim做为一个出色的编辑器,这样的功能当然少不了。本文主要介绍vim的OMNI补全。将在下一篇中介绍其它的补全方式。 vim使用进阶: 自动补全 本文继续介绍vim的补全功能。作为一个通用的编辑器,vim实现的补全功能并不仅仅限于对程序的补全,它可以对文件名补全、根据字典进行补全、根据本缓冲区或其它缓冲区类似的内容进行补全、根据文件语法补全等等,它甚至允许用户自己编写函数来实现定制的补全。本文简要介绍了这些补全的方法。 vim使用进阶: 指随意动,移动如飞 (一) VIM提供的移动方式多如牛毛,但我们并不需要掌握全部这些命令,只需要掌握最适合自己的那些命令。本文介绍了最常用的一些移动命令,在下篇文章中将介绍更高级的移动方法。 vim使用进阶: 指随意动,移动如飞 (二) 本文介绍如何在vim中移动,主要涉及如何使用跳转表(jump-motions)、使用标记(mark)、使用折行(fold),以及如何在程序中移动。 vim使用进阶: 在VIM中使用GDB调试 本文介绍了如何使用vimgdb补丁在vim中用gdb调试程序,同时还介绍了vim的编译方法。然而,vim只是一个编辑器,而不是一个集成开发环境(IDE),所以它对调试的支持很有限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值