参照:
http://blog.chinaunix.net/uid-26831809-id-3357097.html
1.sudo apt-get install vim-gnome(注意不是gvim-gnome)
2.然后将配置文件.vim(这是个插件包)和.vimrc(这是个配置文件)拷到家目录下。(金山快盘 /实用软件 里有现成的)
一个比较好的~/.vimrc
"设置中文帮助文件
set helplang=cn
set encoding=utf-8
"设置语法高亮
syntax enable
syntax on
"设置配色方案
colorscheme desert
"设置TagList
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
"通过WinManager插件来将TagList窗口和netrw窗口整合起来
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>
"设定是否使用 quickfix 窗口来显示 cscope 结果
:set cscopequickfix=s-,c-,d-,i-,t-,e-
"设置cscope的快捷键
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>
"设置QuickFix错误定位快捷键
nmap <F6> :cn<cr>
nmap <F7> :cp<cr>
"设置MiniBufExplorer
"<C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开
"<C-S-Tab> 向后循环切换到每个buffer上,并在但前窗口打开
let g:miniBufExplMapCTabSwitchBufs = 1
"用<C-箭头键>切换到上下左右窗口中去
let g:miniBufExplMapWindowNavArrows = 1
"按F12时在一个新的buffer中打开c/h文件
nnoremap <silent> <F12> :A<CR>
"设置F3为grep快捷键
nnoremap <silent> <F3> :Grep<CR>
"打开文件类型检测, 加了这句才可以用智能补全
filetype plugin indent on
"关掉智能补全时的预览窗口
set completeopt=longest,menu
"经常在这个工程中编程
:set tags=/home/wuyajie/pmon4hisense/tags
"经常使用cscopea
:cs add /home/wuyajie/pmon4hisense/cscope.out /home/wuyajie/pmon4hisense
"设置行号
set nu
3.此时的gvim 打开文件以后会有很多warning,而且是英文的,解决办法:
cd /usr/share/vim/vim72/lang/
sudo ln -s menu_zh_cn.utf-8.vim menu_zh_cn.utf8.vim
4.sudo apt-get install ctags
必须要有这一步 不然会提示:找不到taglist。
5.此时,用gvim打开文件,按wm即可在屏幕左侧打开函数浏览窗口。
============================================================
1.ctags的使用
cd ~/workspace/Source_Insight/linux-2.6.27.39
ctags -R
gvim /drivers/serial/8250.c
gvim命令行中输入:
:set tags=/home/luzhonghui/workspace/Source_Insight/linux-2.6.27.39/tags
该命令将tags文件加入到vim中来,你也可以将这句话放到~/.vimrc中去(去掉前边的:就好), 如果你经常在这个工程编程的话.
将光标定位到8250.c中的任意一个函数,如map_8250_in_reg( )上,按下ctrl+],此时光标会自动跳到该函数的定义处;
*****************************
2012.5.22补充:
在按ctrl+]之后,有时找到多个定义,左下角提示:
找到tag:1/2 或更多
此时
:tselect(简写:tsel) 显示列表
*****************************
按下ctrl+T,跳回到刚才的函数;
变量, 结构, 宏, 等等, 都可以的;
不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:ctags -R
使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>了。
2.Taglist
TagList最基本也是最常用的操作:
将光标定位到左边Tag List窗口中的的某一个结构体、变量或者函数上,按下Enter,会自动跳转到其定义处;
如果还不想让源码跳转,但是想看看该tag在源码中完整的表达,可以将光标移到你想要看的tag上,然后按下空格键,在下面的命令栏中,会显示该tag在源码中完整的写法, 而不会跳转到源码处;
3.Winmanager(文件浏览器和窗口管理器)
通过WinManager插件来将TagList窗口和netrw窗口整合起来
netrw窗口:当光标停在某个文件或文件夹的时候, 按下回车, 可以打开该文件或文件夹;
打开~/vim71/src/main.c, 在normal状态下输入"wm"
其中左上边是netrw窗口, 左下边是TagList窗口, 当再次输入"wm"命令时(注意:还是要在normal状态下)这两个窗口又关闭了;
4.cscope的使用
跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 在项目的根目录(本例中为:/home/luzhonghui/workspace/Source_Insight/linux-2.6.27.39)运行下面的命令:
cscope -Rbq
此时,会生成三个文件:cscope.po.out,cscope.in.out,cscope.out
进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:
:cs add /home/luzhonghui/workspace/Source_insight/linux-2.6.27.39/cscope.out /home/luzhonghui/workspace/Source_insight/linux-2.6.27.39/
上面这条命令很重要, 必须写全, 不能只写前半句:
:cs add /home/luzhonghui/workspace/Source_insight/linux-2.6.27.39/cscope.out
因为源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了.
如果你要经常用cscope的话, 可以把上面那句加到~/.vimrc中去.
cs find g serial_icr_write
按下回车后会自动跳转到serial_icr_write()的定义处
查找vim_strsave()到底在那些地方被调用过了, 用命令:
:cs find c serial_icr_write
按下回车后vim会自动跳转到第一个符合要求的地方, 并且在命令栏显示有多少符合要求的结果
如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:
:cw
在下面的QuickFix窗口中我们可以找到每一个编译错误, 同样你可以用鼠标点击每一条记录, 代码会马上自动跳转到错误处, 你还可以F6,F7进行跳转:
当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
<C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"
经常用到的还有<C-_>c,查找调用本函数的函数
0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件
5.MiniBufExplorer (快速浏览和操作Buffer)
在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念,
<C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开
<C-S-Tab> 向后循环切换到每个buffer上,并在但前窗口打开
6.插件A(c/h文件间相互切换)
作为一个C程序员, 日常Coding时在源文件与头文件间进行切换是再平常不过的事了, 直接用vim打开其源/头文件其实也不是什么麻烦事, 但是只用一个按键就切换过来了, 这是多么贴心的功能啊....
按F12时在一个新的buffer中打开c/h文件, 这样在写程序的时候就可以不假思索地在c/h文件间进行切换, 减少了按键的次数
7.Grep(在工程中查找)
按下F3, 对光标所在的词来个全工程范围的grep
比如将光标移动到serial_outp,按下F3,在最下面的命令行会显示:
Search for pattern:serial_outp
此时你还可以编辑该行, grep支持正则表达式, 你想全词匹配的话可以改成:
Search for pattern:/<serial_outp/>
然后按下回车,在最下面的命令行会显示:
Search in files:*
是问你搜索范围, 默认是该目录下的所有文件, 此时你还可以编辑该行, 比如你只想搜索源码文件:
Search in files:*.c *.h
然后在按下回车, 会在弹出的QuickFix窗口中列出所有符合条件的搜索结果, 你可以在其中查找你想要的结果;
8.自动补全
随便找一个有成员变量的对象, 比如"parmp", 进入Insert模式, 将光标放在"->"后面,
然后按下"Ctrl+x Ctrl+o"或者直接"Ctrl+x+o", 此时会弹出一个下列菜单, 显示所有匹配的标签。
此时有一些快捷键可以用:
Ctrl+P | 向前切换成员 |
Ctrl+N | 向后切换成员 |
Ctrl+E | 表示退出下拉窗口, 并退回到原来录入的文字 |
Ctrl+Y | 表示退出下拉窗口, 并接受当前选项 |
如果你增加了一些成员变量, 全能补全还不能马上将新成员补全, 需要你重新生成一下tags文件, 但是你不用重启vim, 只是重新生成一下tags文件就行了, 这时全能补全已经可以自动补全了, 还真够"全能"吧.
9.语法高亮
写程序没有语法高亮将是一件多么痛苦的事情啊, 幸亏vim的作者是个程序员(如果不是, 那可NB大了), 提供了语法高亮功能, 在上面的图片中大家也可以看到那些注释, 关键字, 字符串等, 都用不同颜色显示出来了, 要做到这样, 首先要在你的 ~/.vimrc 文件中增加下面几句话:
syntax enable syntax on |
如果你不喜欢这个配色方案你可以在"编辑->配色方案"(gvim)中选择一个你满意的配色方案, 然后在~/.vimrc文件中增加下面这句:
colorscheme desert |
:help syntax.txt |
更炫的语法高亮:
你可能会发现很多东西没有高亮起来, 比如运算符号, 各种括号, 函数名, 自定义类型等, 但是看上面的图片, 我的运算符号和函数名都加亮了^_^, 想知道为什么吗? 哇哈哈哈哈.... 让我来教你吧 ...
主 要的思路是新建一个语法文件, 在文件中定义你要高亮的东东, 想高亮什么就高亮什么, 用vim就是这么自信. 所谓的语法文件就是vim用来高亮各种源文件的一个脚本, vim靠这个脚本的描述来使文件中的不同文本显示不同的颜色, 比如C语言的语法文件放在类似于这样的一个路径中:
/usr/share/vim/vim64/syntax/c.vim
其他语言的语法文件也可以在这个路径中找到, 你的也许不在这个路径中, 不管它, 在你自己的HOME下新建一个语法文件, 新建一个空文件:
~/.vim/syntax/c.vim
在其中加入
"======================================================== " Highlight All Function "======================================================== syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2 syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1 hi cFunction gui=NONE guifg=#B5A1FF "======================================================== " Highlight All Math Operator "======================================================== " C math operators syn match cMathOperator display "[-+\*/%=]" " C pointer operators syn match cPointerOperator display "->\|\." " C logical operators - boolean results syn match cLogicalOperator display "[!<>]=\=" syn match cLogicalOperator display "==" " C bit operators syn match cBinaryOperator display "\(&\||\|\^\|<<\|>>\)=\=" syn match cBinaryOperator display "\~" syn match cBinaryOperatorError display "\~=" " More C logical operators - highlight in preference to binary syn match cLogicalOperator display "&&\|||" syn match cLogicalOperatorError display "\(&&\|||\)=" " Math Operator hi cMathOperator guifg=#3EFFE2 hi cPointerOperator guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cBinaryOperator guifg=#3EFFE2 hi cBinaryOperatorError guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cLogicalOperatorError guifg=#3EFFE2 |
再打开你的C文件看看, 是不是又明亮了许多. 还有一个压箱底的要告诉你, 如果你自己增加了一个类型或者结构之类的, 怎么让它也象"int", "void"这样高亮起来呢? 再在上面的文件~/.vim/syntax/c.vim中添加下面的东东:
"======================================================== " My Own DataType "======================================================== syn keyword cType My_Type_1 My_Type_2 My_Type_3 |
补充:
vim编程常用命令
% | 跳转到配对的括号去 |
[[ | 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行) |
gD | 跳转到局部变量的定义处 |
'' | 跳转到光标上次停靠的地方, 是两个', 而不是一个" |
mx | 设置书签,x只能是a-z的26个字母 |
`x | 跳转到书签处("`"是1左边的键) |
> | 增加缩进,"x>"表示增加以下x行的缩进 |
< | 减少缩进,"x<"表示减少以下x行的缩进 |
***************************************************************************************************
2012.5.22补充:
在a.c中
:new b.c
便可以同时编辑a.c b.c 两个文件,使用crtl+w切换
如何复制粘贴?
[编辑]复制
方法一:
先ma标记当前位置为a,移动到新的位置,再y`a或者y'a复制从标记位置a到当前位置的内容。`和'的区别:`以字符为单位,'以行为单位。这个方法应该是所有vi都适用的。(如果不对请指正。)
方法二: 按v或V或Ctrl+V进入visual模式,移动光标选择一段内容,按y(若要使用系统粘贴板,按"+yy)。三者的区别: v以字符为单位,V以行为单位,Ctrl+V是块选择。这个方法只在VIM下适用。
[编辑]粘贴
p或P。区别:前者粘贴到光标后面,后者粘贴到光标前面。
===========================================================================
关于gvim 报错:
CRITICAL **: murrine_style_draw_box: assertion `height>= -1' failed
解决方法:
找到下面的文件
/usr/share/themes/Ambiance/gtk-2.0/gtkrc
把
GtkRange::trough-under-steppers = 0
改成
GtkRange::trough-under-steppers= 1
新装 Ubuntu 10.10,启动时会出现 Gtk-WARNING **: Invalid input
string的错误,其实这个错误在之前的版本中也会出现,原因是 GVIM只能识别中文区域设置为zh_CN.UTF-8,而Ubuntu默认安装将会把中文区域设置为zh_CN.utf8。
解决办法:
sudo ln -s menu_zh_cn.utf-8.vim menu_zh_cn.utf8.vim
此方法使得GVim可以识别zh_CN.utf8。