[VIM]VIM进阶练习一 磨剑
VIM绝对是一把宝剑。使用这把宝剑有半年时间了,虽然中途曾经放弃过,但最后还是回到这条道路上来了。半年前,刚刚进入公司实习,在UNIX 就使用VIM进行编辑,一开始十分不熟练,速度很慢。最后把中文手册的前几章给啃了之后,一些基本的操作都会用了,就开始熟手了,但一直并没有想再磨一下这把剑。直到前一阵子,读了《程序员修炼之道》,其中有一章里说到作为一个程序员,必须有几件熟手的工具,可以大幅度提升编程效率,于是乎,开始再对于VIM进行进阶学习。在这个过程中,才发现VIM强大的一面,越来越喜欢这个编辑器了,甚至已经成为我的绝对编辑器了。
以后几个技巧,都是从网上学习并且使用过之后,总结出来的,非常符合我的使用习惯,拿出来跟大家分享一下:
一.设置
"'中文不乱码
set fileencodings=utf-8,gb2312,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc
set history=300 "保存300条记录
set number "显示行数
set fdm=indent "按照缩进进行折叠
filetype plugin on "打开文件类型差别
filetype indent on "使用文件类型缩进
set completeopt=longest,menu "不显示自动实例的边框
set autoread "有更新自动读
autocmd! bufwritepost vimrc source ~/.vim_runtime/vimrc "自动更新读入配置
set wildmenu "重点推介
set ruler "Always show current position
set cmdheight=2 "The commandbar height
set hid "Change buffer - without saving
set ignorecase "Ignore case when searching
set hlsearch "Highlight search things
set incsearch "Make search act like search in modern browsers
set magic "Set magic on, for regular expressions
set showmatch "Show matching bracets when text indicator is over them
set mat=2 "How many tenths of a second to blink
" No sound on errors
set noerrorbells
set novisualbell
set t_vb=
syntax enable "语法高亮显示
"Tab相关配置
set expandtab
set shiftwidth=4
set tabstop=4
set smarttab
set lbr
set tw=500
set ai "强烈推介,自动缩进
set si "智能缩进
set wrap "Wrap lines
"窗口间方便转移
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
"Tab文件操作使用
map <leader>tn :tabnew %<cr>
map <leader>te :tabedit
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove
"状态行
set laststatus=2
" Format the statusline
set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}%h\ \ \ Line:\ %l/%L:%c
function! CurDir()
let curdir = substitute(getcwd(), '/Users/amir/', "~/", "g")
return curdir
Endfunction
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Cscope 的快捷键
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <leader>cs :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <leader>cg :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <leader>cc :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <leader>ct :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <leader>ce :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <leader>cf :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <leader>ci :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <leader>cd :cs find d <C-R>=expand("<cword>")<CR><CR>
set cscopequickfix=s-,c-,d-,i-,t-,e-
"功能快捷键映射
nnoremap <silent> <F5> :cp<CR> "QuickFix窗口中上一条记录
nnoremap <silent> <F6> :cn<CR> "QuickFix窗口中下一条记录
nnoremap <silent> <F7> :Grep<CR> "查找命令
nnoremap <silent> <F9> :YRShow<CR> "打开剪贴板
nnoremap <silent> <F10> :TMiniBufExplorer<CR> "打开/关闭MiniBufExplorer
nnoremap <silent> <F11> :Tlist<CR> "打开/关闭TagList
nnoremap <silent> <F12> :A<CR> "打开对应 .h 或者 .cpp文件
二.插件
(1)TagList
绝对是重量级的插件,可以让你方便地对于当前文件的Tag进行快速浏览,在对应的tag上面按Enter可以跳转到该行,按 空格键 可以在命令行上看到该行,方便使用。
(2)MiniBufExplorer
通常工作的时候都不会只打开一个文件,VIM里面其实是有一个Buffer的机制,但是并不能图形化显示,不太方便,于是这个插件应运而生,可以在新窗口中看到打开的Buffer,并且可以非常方便地在不同的文件之间游走,非常有用。定义了一个快捷键之后,快速打开关闭,非常好用。
(3)YankRing
VIM里面并没有剪贴板功能,只有一个位置的缓冲,于是只能一剪必贴,不太方便,这个插件可以改善这种状况。我喜欢的用法是打开一个剪贴板,然后选上我要贴的部分,点一个回车,完成,非常方便。
(4)A
方便地从头文件打开源文件,或者源文件打开头文件,节省大量的键入,方便。
(5)Grep
足不出VIM,即可完成对于一些符号在整个项目中的查找,强大,其中还包括一些其他类型的查找。对于我而言,一个正则表达式,一个查找位置,就可以满足我的需求了。
三.外部程序
(1)CTags
方便地查找某个符号相应的位置,只要在需要的目录运行 "CTags -R",然后在VIM中设定使用的 tags 文件即可,不过更强大的还在后头。
(2)CScope
强大的工具,可以让你完全忘记Source Insight了。只要在相应的目录运行 "cscope -Rbq" ,就可以对于项目中的所有文件进行扫描,然后导入到三个文件中,在运行的时候,只要设定使用相应的cscope文件的话,就可以在VIM查找符号定义的位置,符号被引用的位置,函数中调用的其他函数等信息,相当强大。
(3)QuickFix
这是一个相当好用的东西,已经内置在VIM里面了。在VIM中运行:make,相应的编译错误会在这个小窗口里面显示,并且通过:bn , :bp(设成快捷键<F5>,<F6>),上下移动,对于修复bug的时候相当无敌。