gvim配置及ctags的使用及gvim报错的解决办法

来源:互联网 发布:苏州华科电子知乎 编辑:程序博客网 时间:2024/05/21 09:43

参照:

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) 显示列表

:tn和:tp 显示后一个tag和前一个tag

*****************************
按下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再重新启动vim, 并打开一个c程序文件, 是不是觉得眼前突然色彩缤纷了起来...
如果你不喜欢这个配色方案你可以在"编辑->配色方案"(gvim)中选择一个你满意的配色方案, 然后在~/.vimrc文件中增加下面这句:
colorscheme desertdesert是我喜欢的配色方案, 你可以改成你的. 如果菜单中的配色方案你还不满意(你也太花了吧), 没关系, 在 vim.org 上跟你一样的人很多, 他们做了各种各样的颜色主题, 你可以下载下来一个一个的试, 多地可以看到你眼花. 如果这样你还不满意(你还真是XXXX), 没关系, vim的作者早想到会有你这种人了, 你可以创建你自己的颜色主题, 把下面的这篇文档好好学习一些一下吧:
: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这样你自己的类型My_Type_1, My_Type_2, My_Type_3就也可以向"int"一样高亮起来了, 这样的缺点是每增加一个类型, 就要手动在这里添加一下

补充:

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。

 

 

 

解决办法:

cd /usr/share/ vim/ vim72/ lang
sudo 
ln -s menu_zh_cn.utf-8.vim menu_zh_cn.utf8.vim

此方法使得GVim可以识别zh_CN.utf8。












原创粉丝点击