VIM使用系列:.vimrc配置文件和项目管理脚本

前一文写到了使用VIM进行项目开发的准备工做,以后进入春节假期,文章也就停了两个礼拜。今天开始正式上班,继续写VIM使用系列的文章,本文主要是贴出本人简陋的.vimrc配置文件和项目管理脚本,以作参考,抛砖引玉。git

1、.vimrc配置文件

前面说道vim强大的个性定制依赖于它的配置文件和插件机制,而配置文件是保证插件高效使用的基础,所以很是重要。vim的配置文件一般为.vimrc,放置于用户的$HOME主目录下,它能够很简单,甚至没有(使用默认),也能够很复杂,上百行的设置,让人眼花缭乱。下面先贴上本人的.vimrc文件:shell

<!-- lang: shell -->
set nu       "打开行号显示
set ts=4     "设置tabstop,即tab键占用的空格数,:help tabstop
set sw=4     "设置shiftwidth,即>>一次移动多少空格, :help shiftwidth
set cindent  "C语言智能缩进
set textwidth=80   "设置一行字符宽度
set comments=sl:/*,mb:**,elx:*   "自动补全注释符号
filetype plugin indent  on    "开启文件类型自动检测
set completeopt=longest,menu  "设置单词自动补全选项
set autoindent   "设置自动缩进
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936  "设置编码,正确的编码才能够显示中文
set fdm=indent   "设置折叠模式为依据缩进自动折叠,:help fdm
set hlsearch    "设置搜索时高亮显示搜索字,:help hlsearch
set tags+=~/.vim/systags
" Always show the status line
set laststatus=2
" Status line format:
" {buffer number}: {file name, relative path to the current working directory}{modified flag}{readonly flag}
" {help flag}{preview flag} [file type, encoding, format] [current line-total lines, current column][position percentage in file]set statusline=%n:\ %f%m%r%h%w\ [%Y,%{&fileencoding},%{&fileformat}]\ [%l-%L,%v][%p%%]
" change commennt color to baby blue
hi Comment ctermfg=6
"=====================================================================
"taglist option,设置taglist插件的选项,进行定制
"=====================================================================
let Tlist_Show_One_File=1      "只显示一个文件的tags
let Tlist_Exit_OnlyWindow=1    "当taglist窗口是最后一个窗口时,退出vim
let Tlist_Use_Right_Window=1   "taglist窗口显示在右侧
let mapleader = ","            "修改引导符为",",默认为"\",后面都使用修改后的值
noremap <silent> <F6> :TlistToggle<CR>      "至关于定义快捷键
noremap <silent> <Leader>tt :TlistToggle<CR>  "定义第二个快捷键
"==========================================================================
"BufExplore setting,设置bufexplorer插件的选项,进行定制
"==========================================================================
let g:BufExplorerShowRelativePath=1
let g:BufExplorerSplitRight=0
let g:BufExplorerSplitVertical=1
let g:BufExplorerSplitBelow=0
noremap <silent> <Leader>be :BufExplorer<CR>
noremap <silent> <Leader>bs :BufExplorerHorizontalSplit<CR>
noremap <silent> <Leader>bv :BufExplorerVerticalSplit<CR>

"==============================================================================
"csope settings,设置cscope的参数内容,实现启动自动添加数据库
"==============================================================================
if has("cscope")
	set csprg=/usr/local/bin/cscope
	set csto=0
	set cst
	set nocsverb
	" add any database in current directory
	if filereadable("cscope.out")
		cs add cscope.out
	" else add database pointed to by environment
	elseif $CSCOPE_DB != ""
		cs add $CSCOPE_DB
	endif
	set csverb
endif
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>

"=========================================
"NERDTree settings
"=========================================
noremap  <Leader>nt :NERDTree


"===================================================================
" lookupfile setting
"===================================================================
 let g:LookupFile_MinPatLength = 2               "最少输入2个字符才开始查找
 let g:LookupFile_PreserveLastPattern = 0        "不保存上次查找的字符串
 let g:LookupFile_PreservePatternHistory = 1     "保存查找历史
 let g:LookupFile_AlwaysAcceptFirst = 1          "回车打开第一个匹配项目
 let g:LookupFile_AllowNewFiles = 0              "不容许建立不存在的文件
 if filereadable("./lookup.files")                "设置tag文件的名字
 	let g:LookupFile_TagExpr = '"./lookup.files"'
 endif

 nmap <silent> <Leader>lf <Plug>LookupFile<CR>
 nnoremap <silent> <Leader>lb :LUBufs<CR>
 nnoremap <silent> <Leader>lw :LUWalk<CR>
 nnoremap <silent> <Leader>lt :LUTags<CR>

"======================================
"quickfix setting
"======================================
noremap <silent> <Leader>cn :cn<CR>
noremap <silent> <Leader>cp :cp<CR>
noremap <silent> <Leader>cw :cw<CR>
noremap <silent> <Leader>cc :cc<CR>
noremap <silent> <Leader>co :copen<CR>
noremap <silent> <Leader>ce :cclose<CR>

"======================================
"project manager
"======================================
noremap <silent> <Leader>pj :!~/opt/scripts/project<CR>
if filereadable("./cscope.files")
    "silent exec '!ls'
    "exec '!project'
    silent exec '!~/opt/scripts/project'
endif

此配置文件算有点复杂了,75行,还好没到百行。其实配置文件中主要的内容是插件的选项设置和快捷键的定义(命令的重映射),这些内容正是体现个性定制的根本,把他们设置修改为你喜欢、熟悉,使用效率高的内容。数据库

vim自身的选项参数有不少,多到让我以为也许只有做者才知道全部的选项~,可是咱们只需取所需的就行了,并且全部的选项均可以经过在线帮助去理解使用,正如上面注释中写到的:help fdm。而插件的选项、参数、映射,若是你已经作好了前文的准备工做,那么也能够直接经过:help命令去查找和了解其详细的内容。若是你们彻底参照前文的步骤进行使用,那么此配置文件能够彻底复制使用。vim

2、项目管理脚本

前文提到cscope工具须要经过索引源文件来创建tag的数据库,ctags工具也须要进行源文件的索引关系,还有lookupfile插件须要进行项目中全部文件的查找,全部这些都须要咱们提取项目的文件列表,以做为工具、插件的输入源,来获得须要的输出内容。bash

还有一个重要的点就是,在进行项目开发时,文件的数量和内容确定是不断增长和修改的,这也就意味着须要不断地进行相关数据、tags的同步更新,以保证能索引到添加的符号和文件,能进行正确的跳转等。这些工做经过编写一个简单的脚本显然能够更好的胜任,下面是个人脚本project.sh:svn

<!-- lang: shell -->
#! /bin/bash

cscope_file="cscope.files"     #cscope的输入源,文件列表,名字可自定义
lookup_file="lookup.files"     #lookupfile插件的索引文件列表,名字可自定义,但在.vimrc中用到了,须要保持一致,见上面内容

#C语言项目的源文件列表
find . -name \*.c -o -name \*.h > $cscope_file
#cscope经过文件列表创建数据库
cscope -bRq -i $cscope_file 2&>/dev/null

#ctags工具递归创建整个项目的tags文件,默认文件名为tags
ctags -R * 2&>/dev/null

#创建lookupfile插件的文件索引列表,如下内容能够在帮助文档中找到,:help lookupfile-tags
#(echo "!_TAG_FILE_SORTED       2       /2=foldcase/";(find . -type f -printf "%f\t%p\t1\n" | \
#         sort -f)) > ./filenametags
echo "!_TAG_FILE_SORTED 2       /2=foldcase/" > $lookup_file
find . \( -name .git -o -name .svn -o -path ./classes \) -prune -o -not -iregex '.*\.\(jar\|gif\|jpg\|class\|exe\|dll\|pdd\|sw[op]\|xls\|doc\|pdf\|zip\|tar\|ico\|ear\|war\|dat\).*' -type f -printf "%f\t%p\t1\n"| sort -f >> $lookup_file

个人项目只用到了C语言进行开发,所以源文件会相对简单,若是项目使用别的开发语言,须要对脚本进行相应的修改。在每次开发过程结束后或中间,手动运行脚原本保证数据库、tags文件的一致,从而保证开发工做高效正确的进行。工具

相关文章
相关标签/搜索