1.替换方法
替换对应的vimrc文件,定制自己的vimrc
/etc/vimrc 替换此文件;
/home/lmy/.vimrc 只对当前用户有效;
Ubuntu9.10:替换/etc/vim/vimrc,可以在新立得软件包管理器,查看vim到安装路径;
CentOS5.3:替换/etc/vimrc,vim安装目录:/usr/share/vim/vim70;
taglist.vim、winmanager.vim、supertab.vim等插件copy到相应到位置plugin目录;
1.1 vim错误
Taglist: Exuberant ctags (http://ctags.sf.net) not found in PATH. Plugin is not loaded.
通过新立得安装“ctags”
1.2 SuperTab代码补全
下载插件http://www.vim.org/scripts/script.php?script_id=1643
将supertab.vim拷贝到/usr/share/vim/vim72/plugin/
需要补全代码时用"tab"
1.3 Ctags 在程序中跳来跳去
Tag文件(标签文件)可是程序员的看家宝呀, tags 文件是由ctags程序产生的一个索引文件, ctags程序其是叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 并且比它功能强大, 是大多数Linux发行版上默认的ctags程序。
那么tags文件是做什么用的呢? 如果你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 怎么办呢? 用grep? 那会搜出很多不相干的地方. 现在流行用是的<C-]>, 谁用谁知道呀, 当光标在某个函数或变量上时, 按下"Ctrl+]", 光标会自动跳转到其定义处, 如果此时你还想再跳回刚才的位置, 你还可以按<C-T>。
用下面的命令解压安装:
$ tar -xzvf ctags-5.6.tar.gz
$ cd ctags-5.6
$ make
# make install // 需要root权限
然后去你的源码目录, 如果你的源码是多层的目录, 就去最上层的目录, 在该目录下运行命令: ctags -R
我现在以 vim71 的源码目录做演示,那么会产生tags文件,可以打开这个文件看一下,可以看到哪些标识可以定位;
$ cd /home/wooin/vim71
$ ctags -R
此时在/home/wooin/vim71目录下会生成一个 tags 文件, 现在用vim打开 /home/wooin/vim71/src/main.c
$ vim /home/wooin/vim71/src/main.c
再在vim中运行命令,就是将vim中引用刚才产生的tags
:set tags=/home/wooin/vim71/tags
此时在回头学习一下第3节中说的vim手册吧
:help usr_29
不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:
$ ctags -R
1.4 Taglist---帮你高效地浏览源码
下载地址:http://www.vim.org/scripts/script.php?script_id=273
安装方法:将taglist.vim拷贝到/usr/share/vim/vim72/plugin/
在Windows平台上用过Source Insight看程序的人肯定很熟悉代码窗口左边那个Symbol窗口, 那里面列出了当前文件中的所有宏, 全局变量, 函数名等, 在查看代码时用这个窗口总揽全局, 切换位置相当方便, 今天告诉你一个vim的插件: Taglist, 可以同样实现这个功能.
上一节已经告诉你ctags的用法了, ctags的基本原理是将程序程序中的一些关键字(比如:函数名, 变量名等)的名字, 位置等信息通过一个窗口告诉你, 如果你已经安装好taglist, 则可以用下面的命令看看taglist自带的帮助文件:
:help taglist.txt
首先请先在你的vimrc文件中添加下面三句
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
let Tlist_Use_Right_Window=1
此时用vim打开一个c源文件试试:
$ vim ~/vim/src/main.c
进入vim后用下面的命令打开taglist窗口
:Tlist
<C-W>可以在各打开窗口间切换
1.5 WinManager---文件浏览器和窗口管理器
下载地址:http://www.vim.org/scripts/script.php?script_id=95
安装方法:将wintagexplorer.vim、winmanager.vim、winfileexplorer.vim拷贝到/usr/share/vim/vim72/plugin/
WinManager帮助手册:
:help winmanager
注意:<C-W>可以在各打开窗口间切换
注意:输入命令:WMToggle打开关闭下图的窗格
在vimrc中加入下面语句:
let g:winManagerWindowLayout= 'FileExplorer|TagList'
let g:winManagerWidth = 20
let g:defaultExplorer = 0
nmap <C-w><C-b> :BottomExplorerWindow<cr> " 切换到最下面一个窗格
nmap <C-w><C-f> :FirstExplorerWindow<cr> " 切换到最上面一个窗格
nmap wm:WMToggle<cr> " 输入命令:WMToggle打开关闭
2.我的vim配置文件vimrc
"==================================================
" Filename: vimrc " Ubuntu下路径为/etc/vim/vimrc
" Author: myswirl
" Email: myswirl@163.com
" Created: 2010-05-18
"==================================================
set fileencodings=ucs-bom,utf-8,cp936 " 打开文件时会根据fileencodings选项来识别文件编码
set fileencoding=utf-8 " 保存新建文件时会根据fileencoding的设置编码来保存
set encoding=utf-8 " Vim的内部使用编码
set termencoding=utf-8 " Vim终端所使用的编码
set guifont=Luxi\ Mono\ 9 " 设置字体,字体名称和字号
set tabstop=4 " 设置tab键的宽度
set backspace=2 " 设置退格键可用
set nu " 显示行号
set nocompatible " 去掉兼容性bug,上下左右可以使用
"set vbt_vb= " vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声
set wrap " 自动换行
"set nowrap " 不自动换行
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
"set list " 显示制表符
"set listchars = tab:>-,trail:- " 将制表符显示为'>---',将行尾空格显示为'-'
"set listchars=tab:.\ ,trail:. " 将制表符显示为'. '
"set autochdir " 自动设置目录为正在编辑的文件所在的目录
set hidden " 没有保存的缓冲区可以自动被隐藏
set scrolloff=5 " scrolloff
"--------------------------------------------------------------------------------
" 查找/替换相关的设置
"--------------------------------------------------------------------------------
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 " 总是显示状态行
set ruler " 在编辑过程中,在右下角显示光标位置的状态行
"--------------------------------------------------------------------------------
" 编程相关的设置
"--------------------------------------------------------------------------------
set completeopt=longest,menu " 关掉智能补全时的预览窗口
filetype plugin indent on " 加了这句才可以用智能补全
:set tags=/home/lmy/ipmsg/tags
syn on " 打开语法高亮
set showmatch " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set smartindent " 智能对齐方式
set shiftwidth=4 " 换行时行间交错使用4个空格
set autoindent " 自动对齐
set ai! " 设置自动缩进
colorscheme desert " 配色方案/usr/share/vim/vim72/colors
"--------------------------------------------------------------------------------
" 代码折叠
"--------------------------------------------------------------------------------
set foldmarker={,}
set foldmethod=syntax " maker 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 "
"--------------------------------------------------------------------------------
" 模仿MS Windows中的快捷键
"--------------------------------------------------------------------------------
vmap <C-c> "yy
vmap <C-x> "yd
nmap <C-v> "yp
vmap <C-v> "yp
nmap <C-a> ggvG$ "
"--------------------------------------------------------------------------------
" 窗口操作的快捷键
"--------------------------------------------------------------------------------
nmap wv <C-w>v " 垂直分割当前窗口
nmap wc <C-w>c " 关闭当前窗口
nmap ws <C-w>s " 水平分割当前窗口
"--------------------------------------------------------------------------------
" 模仿MS Windows中的保存命令: Ctrl+S
"--------------------------------------------------------------------------------
imap <C-s> <Esc>:wa<cr>i<Right>
nmap <C-s> :wa<cr>
"################################################
" 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 = 20 " 浏览器宽度
"--------------------------------------------------------------------------------
" QuickFix
"--------------------------------------------------------------------------------
nmap <F6> :cn<cr> " 切换到下一个结果
nmap <F7> :cp<cr> " 切换到上一个结果
"--------------------------------------------------------------------------------
" WinManager :WMToggle
"--------------------------------------------------------------------------------
let g:winManagerWindowLayout= 'FileExplorer|TagList' "
let g:winManagerWidth = 20 "
let g:defaultExplorer = 0 "
nmap <C-w><C-b> :BottomExplorerWindow<cr> " 切换到最下面一个窗格
nmap <C-w><C-f> :FirstExplorerWindow<cr> " 切换到最上面一个窗格
nmap wm:WMToggle<cr> " 输入命令:WMToggle打开
"--------------------------------------------------------------------------------
" MiniBufExp
"--------------------------------------------------------------------------------
"let g:miniBufExplMapWindowNavVim = 1
"let g:miniBufExplMapWindowNavArrows = 1
"let g:miniBufExplMapCTabSwitchBufs = 1
"let g:miniBufExplModSelTarget = 1
"--------------------------------------------------------------------------------
" cscope
"--------------------------------------------------------------------------------
cs add /home/nfs/microwindows/src/cscope.out /home/nfs/microwindows/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= "Lmy" "
let g:C_Project= 'F9' "
let g:Cpp_Template_Function = "c-function-description-Lmy" "
let g:C_TypeOfH = "c" " *.h文件的文件类型是C还是C++
"#################################################
"########################## End Of Vimrc ##########################
"#################################################
" if filetype is C
" TODO
" fi