OK,上一篇文章,我们已经配置好了一个可以正常使用的VIM,那么在我们真正来到程序员的VIM世界之前,希望你能在VIM里面再多加下面几个配置。
set go= "无菜单、工具栏
对,让我真正抛弃鼠标,进入美妙的VIM之旅吧!
首先说说一个IDE应该有的几个功能:
1)源代码结构及函数列表
2)变量定义支持跳转等
3)代码自动补全 当然VIM还给了我们几个小惊喜:
4)快速批量注释与反注释
5)由注释直接生成文档
6)文件头作者信息自动添加
7).cpp和.h文件之间的快速切换
那么接下来,我们久来看看我们将会用到的插件列表。
首先介绍一下一些必备知识,我们需要下面两样东西,来辅助完成vim成为IDE的大业--ctags和cscope,这两样东西不是vim的插件而是可执行程序,linux和windows下都有。ctags主要实现了c、c++、java、c#等语言的智能分析,并声称tags文件,后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于他。
有了tags文件后,只需要在变量上按下 CTRL + ]键,就可以自动跳到变量定义的位置。
而cscope据说诞生就是为了来替代ctags的,因为他有着比ctags更加强大的功能,举个例子,ctags只能分析出这个函数在哪里被定义,而cscope除了这一点之外,还能分析出这个函数再哪里被调用。
当然cscope目前还是有不少bug的,但是也不影响我们的使用。
1)taglist.vim 实现了源代码结构和函数列表的展示,功能非常强大
2)有了tags就自动支持了
3)omnicppcomplete.vim 实现写C/C++语言时自动补全
4)NERD_commenter.vim 注释插件
5)DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释
6)这段配置是本人自己写的稍后贴出。
7)a.vim 实现.cpp和.h快速切换
下面一个个的讲解配置: 注意,请先检查是否有如下配置,如果没有请添加:
if(has("win32") || has("win95") || has("win64") || has("win16"))
let g:vimrc_iswindows=1
else
let g:vimrc_iswindows=0
endif
autocmd BufEnter * lcd %:p:h
首先确认安装了ctags和cscope,并且确认这两个可执行程序所在的目录已经放进环境变量里面。(必须做,否则后边都无法操作) 在vimrc中配置如下:
map <F12> :call Do_CsTag()<CR>
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<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>:copen<CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
function Do_CsTag()
let dir = getcwd()
if filereadable("tags")
if(g:iswindows==1)
let tagsdeleted=delete(dir."\\"."tags")
else
let tagsdeleted=delete("./"."tags")
endif
if(tagsdeleted!=0)
echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None
return
endif
endif
if has("cscope")
silent! execute "cs kill -1"
endif
if filereadable("cscope.files")
if(g:iswindows==1)
let csfilesdeleted=delete(dir."\\"."cscope.files")
else
let csfilesdeleted=delete("./"."cscope.files")
endif
if(csfilesdeleted!=0)
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None
return
endif
endif
if filereadable("cscope.out")
if(g:iswindows==1)
let csoutdeleted=delete(dir."\\"."cscope.out")
else
let csoutdeleted=delete("./"."cscope.out")
endif
if(csoutdeleted!=0)
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None
return
endif
endif
if(executable('ctags'))
"silent! execute "!ctags -R --c-types=+p --fields=+S *"
silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."
endif
if(executable('cscope') && has("cscope") )
if(g:iswindows!=1)
silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
else
silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
endif
silent! execute "!cscope -b"
execute "normal :"
if filereadable("cscope.out")
execute "cs add cscope.out"
endif
endif
endfunction
1)taglist.vim
先截个图给大家看下:
把taglist.vim放在plugin目录下后,在vimrc中添加如下的配置:
"进行Tlist的设置
"TlistUpdate可以更新tags
map <F3> :silent! Tlist<CR> "按下F3就可以呼出了
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表,如果想只有1个,设置为1
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
let Tlist_Process_File_Always=0 "是否一直处理tags.1:处理;0:不处理。不是一直实时更新tags,因为没有必要
let Tlist_Inc_Winwidth=0
2)已经在上面解释过,所以这里不再做赘述
OK,到这里,我们已经能够成功的显示函数列表和查看函数定义了,阅读代码已经没有问题了,剩下的就是要在写代码过程中用到的插件啦,我们在把VIM打造成一个真正的IDE(3)中继续~
isunbo on #
function Do_CsTag(){}endfunction 之间少了一个endif.^_^
taglist.vim插件的效果看到了,但是showfunc.vim放到vimfiles/plugin目录下后,不知道为什么并没有提示函数定义和匹配tags.
Reply
Dante on #
咦,奇怪,我试了代码没有问题哦,要按F12生成tags的~~ 然后在函数让按fd,是这样的吗?
Reply
isunbo on #
按F12了,ctags和cscope也应该是正确配置的.
"然后在函数上按fd"是什么意思?怎么按?
Reply
Dante on #
就是在普通模式下,直接按下fd哦
Reply
master12 on #
请问
把taglist.vim和 showfunc.vim插件放到plugin里
这里的plugin是指/usr/share/vim/vim76/plugin/
还是指什么? 还是指在当前用户主目录下建一个plugin
Reply
Dante on #
在用户主目录建立一个.vim/plugin 即可
Reply
master12 on #
哦 谢谢
楼主晒晒你vimrc呗
Reply
Dante on #
嗯啊,一直在酝酿着放出来呢,其实也都是些很普通的配置,不过还是先整理一下,免的放出来乱七八糟的……哈哈,等忙过这一阵就一定放出来和大家交流~~
Reply
wzdxt on #
你好!
非常感谢能与我们分享你的经验!
关于那个showfunc.vim,在函数上按fd显示原型能正常使用 但输入func(后没有显示函数定义原型 是什么原因呢?
会不会跟操作系统有关?我用的是ubuntu
Reply
Dante on #
应该不会呀,我在linux下终端下试过的~~ 是suse10,哦,对了,你的vim版本是多少的?
Reply
wzdxt on #
ubuntu 9.10
vim 7.2
如果是版本问题的话那就算了 其实影响也不是很大
Reply
Dante on #
呃,我也使用vim 7.2哦,只是不知道是不是ubuntu的问题了……
Reply
benzi on #
cscope 支持PHP吗,如果可以如何生成?
omnicppcomplete支持php吗,如果可以如何使用?
Reply
Dante on #
呃,对cscope是否支持php没有过研究哦,只是ctags是支持php的,之前看到过一款类似omnicppcomplete的补全php的插件,可惜忘记了,等我找到的时候告诉你吧。
omnicppcomplete只能补全C/C++……
Reply
benzi on #
是的 ctags 支持PHP 谢谢
Reply
吴叔 on #
网上说因为php是类C语言,所以cscope也是支持的,但是有一点小问题.
Reply
stephenjy on #
你好,我在用:call Do_CsTag()时碰到一个很奇怪的问题,执行完这个函数之后,整个屏幕都成了空白,再执行:redr也没有用,只能c-b c-f上下翻一翻页才会被刷新,不知道是什么原因造成的。跟踪发现执行只要执行:
execute "!xxx"
都会出现这种现象,不管前面有没有silent,不知何故。
P.S. 函数中删除三个文件,建议把删除文件提取出来做一个函数:
function! DeleteFile(dir, filename)
if filereadable(a:filename)
if (g:iswindows)
let ret = delete(a:dir."\\".a:filename)
else
let ret = delete("./".a:filename)
endif
if (ret != 0)
echohl WarningMsg | echo "Failed to delete ".a:filename | echohl None
return 1
else
return 0
endif
endif
return 0
endfunction
Reply
stephenjy on #
评论里面的缩进居然都没了……
Reply
stephenjy on #
Sorry,描述有点错误,是
silent execute "!xxx"
会导致上述现象,不知道其他人有没有碰到过。
Reply
Dante on #
呵呵,你是用的secureCRT的终端吧,是会出现这个问题的,不是VIM的问题,而是secureCRT本身显示问题,可以通过CTRL+L来刷新屏幕~
Reply
stephenjy on #
我试了c-l也刷新不了,后来我在那个函数中最后再增加一句执行::redr! 就行了,光是redr不行,要感叹号。
Reply
Dante on #
呃,从来没有遇到过哦,你vim版本是多少呢?
Reply
stephenjy on #
vim-7.2.284, Debian/Sid, gnome-terminal
btw 这个博客不会通过邮件通知回复吗?
Reply
Dante on #
会的哦,可能是嵌套层数太多了……
不过你这个版本应该完全没有问题才对呀~
Reply
Dante on #
嗯啊,是可以写到一起,但是为了长远看可以将ctags和cscope分开,就还是分开写了
Reply
porco_rosso on #
晕死了,F12的效果具体是什么,我是windows,用F3可以生成Tlist,但是F12无效,在后面两个cscope的命令窗口里总是提示找不到文件,具体怎么样实在看不清两个窗口一闪而过。
cscope我是在这里下的http://code.google.com/p/cscope-win32/。
ctag和cscope都放到了system32目录里
Reply
Dante on #
咦,没道理呀,F3可以用代表是在path下呀,呃,会在当前目录生成一个tags文件,以及三个cscope相关的文件,具体名字记不清楚了~
Reply
porco_rosso on #
搞清楚了错误在哪里,但是不能解决,
silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files 的时候,提示“没有找到cscope.files”
然后执行silent! execute "!cscope -b"时,提示“cannt find source file”
Reply
Dante on #
你的当前目录里必须有上面那几种扩展名文件的一种哦
Reply
porco_rosso on #
不好意思,光忙着自己折腾了,没想到博主那么晚还在。博主,帮我解答一下我的新问题,谢谢啊!
Reply
porco_rosso on #
不是没有找到cscope.files,是没有找到*.c,*.cpp等这些文件吧,那个命令的意思应该是把这些命令文件名写入一个cscope.files命令。
然后第二句应该是根据cscope.files生成cscope.out文件,既然前面没有找到*.c*.cpp这些文件,当然就不能生成cscope.out了
所以现在的问题就只是没有找到*.c和*.cpp这些文件了。
可是为什么会找不到呢?
Reply
porco_rosso on #
好奇怪,如果我自己直接在cmd里敲这些dir和cscope命令,就可以生成cscope.files和cscope.out,但是在vim里按F12就不可以。
我的cscope已经换成了您在《在Vim(gvim)中使用cscope》里提到的http://sourceforge.net/projects/mslk/files/这里的win32版cscope了
Reply
porco_rosso on #
进一步找到了问题的根源,我的gvim不知道为什么总是在windows/fonts这个文件夹里面搜索,而不是在源代码当前所在文件夹。
因为我尝试在vim里调用dir,显示的是fonts里的文件
然后我在这句里silent! execute “!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files 加上了*.ttf,然后按F12就可以在fonts里生成cscope.files了。
为什么不再当前源代码文件夹里搜索呢???
Reply
porco_rosso on #
我自己在vimrc里加了这么一句autocmd BufEnter * lcd %:p:h 来保证工作目录为当前目录,这样子F12可以正常工作了
Reply
porco_rosso on #
博主啊,我把工作目录解决了,不知道您能不能给我什么更好的解释或方法。可是还有个疑惑,
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") | "实现打开同一文件时,vim能够自动记住上一次的位置
\ exe "normal! g`\"" |
\ endif
这个自动记住上一次的位置,真的管用吗?貌似在我这里不管用。
Reply
Dante on #
呃,我这里是管用的呀……
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
呃,确实是一模一样的呢
Reply
Dante on #
呃,刚看到你说要更好的解释,汗……
你应该不是远程登录linux,而是直接在linux里面的终端下吧,这样vim打开的时候的确不会自动cd到这个目录……
我也觉得很怪异,但是因为我一般都是远程ssh到服务器上用,所以一直没有遇到过这个问题
Reply
hjs-1122 on #
为什么我的总是找不到模式 该安装的我也全安装了啊 ctags 和 cscope 在命令行下敲了也是有用的 按了F12也生成了文件 我用的是linux
Reply
Dante on #
呃,这样啊,能把你测试omnicppcomplete.vim那段代码完整贴出来看一下不?
Reply
hjs-1122 on #
#include
using namespace std;
class A{
private:
int a;
int b;
public:
A(int a, int b){
this->a = a;
this->b = b;
}
}
int main(int argc, char * argv[]){
A t;
t.(“在这我用了你说的F12 前面的插件我也装好了,CTRL+X,CTRL+O vim 说模式找不到”)
}
Reply
Dante on #
额,你建立的文件名是?
Reply
Dante on #
汗, 你class的语法写错了。
class A{
private:
int a;
int b;
public:
A(int a, int b){
this->a = a;
this->b = b;
}
}
最后要有一个分号…… (;)
Reply
hjs-1122 on #
是在这上面忘打上了
Reply
hjs-1122 on #
能加我QQ吗 575754703
Reply
hjs-1122 on #
大侠 小弟搞了好长的时间也没搞好 帮帮我这个采用vim的小弟吧
Reply
Dante on #
啊,不好意思啊,刚才一直在搞博客,cnzz的统计又抽风了,我现在加你~
Reply
hjs-1122 on #
// 文件名test.cpp
class A{
private:
int a;
int b;
public:
A(int a, int b){this->a = a ; this->b = b;}
};
int main(int argc, char * argv[])
{
A a;
a.(之后就报全能补全(^O^N^P)找不到模式)
}
也建立了 tags 和cscope.file 和 cscope.out
Reply
Dante on #
按道理应该没问题的……,我加你QQ了,貌似你没通过?
Reply
hjs-1122 on #
楼主 你见过我这种情况吗
Reply
hjs-1122 on #
大侠 搞好了 原来我的tags设置少写了一个等号(=) 我有两个tags 一个是set tags = /home/hjs-wcl/C++/ 还有一个是 tags=/home/hjs-wcl/.vim/tags/cpp
应该在写成 tags+= ……
谢谢大侠了 你的博客 真赞!!!!
Reply
Dante on #
哈哈,搞定了就好呀~~
有问题随时联系~~~
Reply
vimer新人 on #
您好:
我看见statusline栏上能够显示文件的编码格式,请问这个参数是什么啊。
Reply
Dante on #
set statusline=%k%F[%{&ff}:%{&fenc}]%m%r%h%w\ %=[%l,%c]
其中%{&fenc}就是
Reply
vimer新人 on #
谢谢了
Reply
raolairaoqu on #
我刚接触vim,想先看一下效果全开的感觉,就按您写的试了试。当我配置完taglist的时候,打开程序,结果list里没函数名和库函数,这是怎么回事?
Reply
Dante on #
1.你打开的文件名是啥?
2.文件路径又没有包含中文?
3.是否安装了ctags,并且在环境变量里
先排除下这三个问题~~
Reply
raolairaoqu on #
文件名是数字,
路径没中文
我ctags不是很会配置,我把ctags.exe放进了c:\program files\vim\vim72里面,环境变量是c:\program files\vim\vim72。但是ctags文件夹里面剩下的文件不知道怎么办。能不能讲一讲ctags的具体配置方法。
Reply
Dante on #
ctags就是放到path里面就可以哦,奇怪了,没有报任何错误吗?你不是在桌面上打开文件的吧?
Reply
raolairaoqu on #
哦。现在能用了,谢谢。看完(3)还有2个问题,c-]不能用,omnicppcomplete也不不能用,提示找不到。还有就是ctag附带的那些文件有什么用?
Reply
Dante on #
ctags附带的文件都是没有用的,
你有生成ctags文件吗?
Reply
raolairaoqu on #
我试了下把源文件拷到了ctags自带的文件夹里和里面的文件一起f12,c-],和代码补全都能用了。
Reply
raolairaoqu on #
汗,其实是我选的程序太简单,所以一直以为c-]不能用。问题就剩一个了:omnicppcomplete的问题,把源文件拷到了ctags自带的文件夹里和里面的文件一起f12就可以不全,不防在一起就提示找不到。麻烦你了。
Reply
raolairaoqu on #
是我错了,我一直在输库函数里的函数,所以一直不能代码不全,我输了一下自己定义的函数就ok了。占了这么多地方说了一堆废话,真的是不好意思,能删的话就删掉吧,给您添嘛烦了。
Reply
ideepblue on #
博主 我按照你的设置都弄了,但是source _vimrc的时候会报错,说
函数 Do_Cstag 已存在,请加!强制替换。
这个该怎么解决?
Reply
Dante on #
呃,不需要source vimrc吧?自动就会载入配置文件的~
Reply
ideepblue on #
修改了vimrc不source咋立刻生效?
Reply
ideepblue on #
我知道了 函数一般就加载一次 会说已存在很正常
谢谢博主~
Reply
xiao on #
如何可以使这种提示不显示,每次重载vim配置就会跳出
Reply
nedzqbear on #
在函数名后加一个感叹号。
function Do_CsTag() 修改成
function! Do_CsTag()
这样重载vim配置时,就不会报错了。
Reply
Dante on #
嗯,是这样的。
Reply
pwangeng on #
F12功能:
处理 function D_CsTag 时发生错误:
第3行:
E121: 未定义的变量:g:iswindows
E15: 无效的表达式:(g:iswindows==1)
第8行:
E121: 未定义的变量:tagsdeleted
E15: 无效的表达式:(tagsdeleted!=0)
Reply
Dante on #
iswindows是之前定义的一个变量……
if(has("win32") || has("win95") || has("win64") || has("win16"))
let g:vimrc_iswindows=1
else
let g:vimrc_iswindows=0
endif
Reply
david on #
请问如何实现自动补齐引号?(各种括号已经可以自动补齐了)谢谢。
Reply
abc881858 on #
我只是奇怪 vissual assist 没人用吗? VS专用
Reply
Dante on #
呵呵,大学时候看到同宿舍的同学有用的,可能也是工作的原因吧,我几个做游戏开发的同事确实用vs比较多。。。
不过我是做啥开发都用vim,习惯了。。
Reply
nan on #
请教博主个问题。小弟在c++头文件中声明的类成员函数,taglist运行也没问题,都可以正常跳转,但是如果打开头文件,taglist的窗口里却不显示这些声明过的函数和成员变量。只有在头文件中实现的类成员函数可以正常显示。
由于实验室权限森严,所以小弟只有ctags, 没有cscope.
平台: Debian + Vim 7.2
Reply
Dante on #
呃,这个问题我确实也存在,不过觉得没有什么妨碍就没有管他了,taglist的实现可能就是默认这样的。。只是猜测,并没有详细看过taglist的源码
Reply
zhoulong on #
请问fd是什么啊?不懂。。。怎么出showfunc的效果呢
Reply
aijieqiang on #
你的color scheme叫什么
Reply
Dante on #
desertex ,也用wombat
Reply
老猫 on #
你好,我按照步骤安装成功以后,现在按F12会生成tags文件,请问能指定这个tags文件的生成地址吗?想把所有的tags都编辑到一起
Reply
Dante on #
可以通过 -f 参数指定写入的tags文件路径名,当然可以先cd 到对应的目录,然后执行ctags命令,效果是一样的。
Reply
aoyoo on #
你好, 我安装完成后, 按F12也正常
但是在某变量名按 CTRL+ ] 有时会提示:
找到 tag: 1/2 或更多
大概是因为代码中有重载的变量名
此时只能定位到其中一处,不知道怎么定位到其他的声明变量的地方
请问有解决的办法么?
Reply
Dante on #
呵呵,输入
:ts
就可以了,在本博另一篇专门介绍ctags的文章里面有说~~
Reply
吴叔 on #
请问博主这个您写的那个showfunc可以用在php和javascript上面吗?
Reply
Dante on #
应该是不支持的哦,我记得当年写的时候只支持了c++,java和c#~
Reply
吴叔 on #
是不支持,强烈建议博主加入autocmd BufEnter * lcd %:p:h 这一句,没有这句我一直出错..总是把VIM目录当作我的操作目录,if(has("win32") || has("win95") || has("win64") || has("win16"))
let g:iswindows=1
else
let g:iswindows=0
endif这段最好也加上,因为好多像我这样的新手开始都没有看前面的文章了
Reply
Dante on #
好~~ 我加一下~~
autocmd BufEnter * lcd %:p:h
这句不加确实有人有问题有人没问题。。。我还是统一加一下吧
g:iswindows这里我也加一下,呵呵~
Reply
光头大叔 on #
我想问一下,为什么那个showfunc有时候不起作用,
比如说:printf( 会出现提示, scanf( 却不会出现,
tags文件我已经按要求生成好了,怎么样都不出现提示,求解,谢谢。
echo_func也是,code_complete也是
Reply
zpcat on #
博主:请教一个vim使用tags的问题:
我的vim7.2用c-] 跳转时,如果有很多项目时会出现选择的的列表 (即:ts).
现在用fedora14 vim7.3, 发现没有默认出现选择列表,而是直接跳到第一匹配的地方。还要输入:ts来选择。不知道该怎样设置?
Reply
Dante on #
在vimrc中加入:
map <C-]> g<C-]>
即可
Reply
osal on #
是什么意思按什么键?
Reply
springlie on #
关于showfunc.vim,有两个小小疑问:
1 当fd发现函数有多个定义,但下方只显示第一条,如何在定义之间切换
2 “另外还实现了当输入'('时,会自动匹配tags,展示函数的定义原型。”,这个功能怎么实现,是在神马模式下,光标处于哪个位置的时候输入'('?折腾了半天没弄出来。
Reply
Dante on #
对第一个问题
alt + +
alt + -
对第二个问题,就是在插入模式下输入'('
Reply
springlie on #
第一个问题解决。
第二个,在输入’(‘的瞬间,定义出现了一下,但是马上就消失了,求解。
:)
Reply
Dante on #
那可能是和一些其他插件有冲突。。
Reply
springlie on #
关于插入模式下输入’(‘瞬间一闪的问题,当时只有少量几个常用插件,应该不会冲突。
特地换上echofunc看了下,发觉可以正常显示。
博主的插件是不是哪里有些小疏忽。。。
Reply
Dante on #
很久没更新了。。echofunc已经把bug修复的话,我抽时间把文章里换成echofunc吧,哈哈
Reply
机器猫 on #
在哪里下载taglist.vim文件呀
Reply
机器猫 on #
google 到了,在http://vim-taglist.sourceforge.net/
还以为也是博主写的
Reply
Dante on #
呵呵,vim.org上也有下载的,可以看一下置顶帖中的插件列表,那里更全一些。
Reply
Rongzq on #
Hi Dante,
我在追随你的脚步学习着Vim, 我有个疑问关于Csope,
在这段code中
nmap s :cs find s =expand(""):copen
Map的是什么按键呢? 在Normal时要怎么按?功能是什么?
谢谢
Reply
Dante on #
map的是s
功能是查找一个变量的定义
Reply
Rongzq on #
抱歉, 好像在发表之后s之前的字符没有了,请看一下您在这篇文章中对于csope的vimrc, 在s之前有的。
但是我不理解这个《C-@》是什么键, Ctrl+@吗?, 在:map 之后我看得的是《^@》s, 所以我就不明白怎么使用这个快捷键了
Reply
Dante on #
对,实际就是 ctrl + 2,因为ctrl的时候是无视shift的~
Reply
嘉谟之行 on #
为什么按F3 list显示在右边。 我要显示在左边如何做
Reply
嘉谟之行 on #
不好意思 ,刚看了注释。 设置为0即可
。但是最基本的 快捷键不会 ,搞成ide 意义不大。
接触vim 也有一年了 ,一直 没怎么深入
Reply
Dante on #
呵呵,可以尝试深入一下,vim还是很有魅力的~~
Reply
jungle on #
你好,最近用插件遇到了一个小问题,之前安装了echofunc这个插件,刚才直接删除了这个文件,但是写代码的时候使用全能补全的时候提示 没有echofuncclear 我想知道如何卸载掉一个插件啊
Reply
Dante on #
呃,vim确实没有比较好的删除插件方法,你只能对应那个插件安装包,把每个文件都删除。。
Reply
依云 on #
git 不错
Reply
dczsf on #
请问对应哪个按键?脚本配置好了用cscope时不知道怎么按快捷键了。
Reply
dczsf on #
原来评论里已经有人问了,知道了。
Reply
zsam on #
处理 function D_CsTag 时发生错误:
第3行:
E121: 未定义的变量:g:iswindows
E15: 无效的表达式:(g:iswindows==1)
第8行:
E121: 未定义的变量:tagsdeleted
E15: 无效的表达式:(tagsdeleted!=0)
前面有人问过,我已经全部加了上面的代码,为什么按F12后还出现这种错误呢?
Reply
zsam on #
if(has("win32") || has("win95") || has("win64") || has("win16"))
let g:vimrc_iswindows=1
else
let g:vimrc_iswindows=0
endif
autocmd BufEnter * lcd %:p:h
把上面的vimrc_iswindows改为iswindows解决了。。郁闷,怎么有这样事情呢!!!
Reply
Dante on #
呃,这个好奇怪。。。从来没遇到过。。
Reply
大尾巴兔 on #
调试了我好久啊...
博主一开始定义的是let g:vimrc_iswindows=1
后面引用的是iswindows.
所以报错了.
Reply
大尾巴兔 on #
另外我想问下博主,我在xp下写java 项目
如何对整个项目生成tags呢?
对单个文件按F12后,执行跳转Ctrl+] 仍然提示未找到tags.
Reply
大尾巴兔 on #
我通过对整个Project 生成tags解决了问题.
但是我在一个文件中按Ctrl+] 跳转,然后Ctrl+t 跳回来.
再按Ctrl+] 的时候又提示未找到tags.
Reply
大尾巴兔 on #
问题解决了.
通过设置
set tags=tags;
set autochdir
注意第一个命令里的分号是必不可少的。这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
Reply
Lazy.monkey on #
请教博主:我用你的设置生成了tags文件,但无法显示python的函数信息,而同样的设置c/c++都显示正常,求解。。。
Reply
Lazy.monkey on #
博主,找到问题了,为了让SnipMate支持django的代码片段补全我设置了:
<pre lang="cpp" line="1">
au FileType python set ft=python.django
au FileType html set ft=htmldjango.html
</pre>
python的FileType就被修改为python.django了,taglist识别不了,请问博主是如何解决的呢?
Reply
Dante on #
如果是为了snipmate的话,其实你可以把snip文件改名字:
python-django.snippets
我就是这么做的。
Reply
Lazy.monkey on #
哦。。。好吧,这样的话也可以,十分感谢!
Reply
笨笨 on #
if(has("win32") || has("win95") || has("win64") || has("win16"))
let g:vimrc_iswindows=1
else
let g:vimrc_iswindows=0
endif
autocmd BufEnter * lcd %:p:h
g:vimrc_iswindows 应该是 g:iswindows
Reply
Dante on #
嗯,是呢。。因为中间也改了很多次。。
Reply
bingoboy on #
博主。。那个环境变量是指PATH吗
Reply
Dante on #
是的哈
Reply
bingoboy on #
谢咯。。我回去试下。。。
Reply
vimrc配置小建议 on #
在1)taglist.vim 那段的vimrc配置代码中,第9行的注释( "是否一直处理tags.1:处理;0:不处理)最好并到上一行行尾;或者在之前的配置代码中加入set paste命令。
不然vimer们在复制这一段到vimrc时最后两行会被自动注释掉。
楼主的文章写得很好,非常实用,大赞一个!!!
Reply
Dante on #
感谢提醒,已经修改!
Reply
bughou on #
一个ctags / cscope问题请教:
我们的c++代码里有很多类,每个类都有一些同名的方法,比如:Initialize(),Resume()之类的,这样在CTRL+] 对这些方法调用进行跳转的时候 这些类一下子都弹出来了,几十个让我选,有没有什么方法,可以根据方法前面的类名或者对象名,智能识别出是哪个类的方法啊?就像vs那样。这个问题一直困扰着我和身边的同事,望赐教。
Reply
Dante on #
这个问题的确是这样。。目前我也没有找到很好的解决方法。。
Reply
ccheng on #
博主,你之前也用vim开发过java吗?那你用代码补全吗,我现在一直没在vim里面找到好的java补全插件
Reply
Dante on #
嗯, 很早很早了。。有一个叫 Vim Intellisense 貌似可以做到,当时还测试过。
Reply
lemon on #
这个都是在linux下的么?我下载的ctags-5.8居然是rpm文件,windows下不会用.请教一下,因为我刚接触vim
Reply
Dante on #
windows下也有ctags的,google一下吧,地址我记不清了。。
Reply
lemon on #
呵呵,谢谢回复~这几天一直在弄,已经都整好了,再次感谢
Reply
happypeter on #
http://happycasts.net/episodes/1
一个ctags视频
Reply
Dante on #
看了一下,讲的太浅了,不过对入门的朋友很有帮助。
Reply
happypeter on #
感谢关注,在revised版里我会在丰富一些内容的。
Reply
Dante on #
不客气,加油!欢迎分享!
Reply
happypeter on #
Here comes the revised version:
http://happycasts.net/episodes/25
Reply
wayn on #
ls好,我问下,有没有哪个补全插件能提示整个tags文件中的function,我现在用的acp阿,neocomplcache阿,都是只能自动提示vim打开的文件中的function阿。求助ing.
Reply
Dante on #
C-X C-O 不行么?
Reply
happypeter on #
try `:ptag your_function_in_tags_file`
Reply
JLQSheenero on #
为什么我在.vimrc中加入autocmd BufEnter * lcd %:p:h之后,重启vim,编辑一个文件,用pwd查看当前目录,发现还是启动vim时的目录。但是如果在vim中直接执行autocmd...之后效果是正常的
Reply
Dante on #
加上echo看看是否执行了?
Reply
xxx on #
请问按不显示C代码函数列表只显示一个窗口,但-vimrc文件可以显示函数列表是怎么回事啊??
Reply
xxx on #
少打了个F3
Reply
ypchenry on #
你好,我在ubuntu12.04下配置home下.vimrc,syntax enable syntax on filetype plugin indent on 等等后,把vim安装目录下的c.vim cpp.vim等复制到~/.vim/ftplugin/下,不能显示C 语言等语法高亮 ,请问您知道怎么解决么?(加环境变量export TERM=xterm-color也不行)
Reply
Y-- on #
博主你好,
我在win 下用gvim,当我按v切换到“可视模式“后,光标从方块变成了竖线,而这个竖线是停在方块所选的字的左边,所以,如果只想要选中某一行的最后一个字,好像不行。而在linux下,光标在可视模式下还是方块。
请问,能否把在win下的GVIM的可视模式下的光标变成还是像linux那样还是方块 。
Reply
Y-- on #
补充请教,
现在会把光标变成方块了。
不过本质问题还是没有解决。
就是windows下,gvim,可视模式下,方块停在的那个字符,如果向左选的话,这个字符是选不中的。向右选是选中的。
好像在Linux下,不管是向左还是向右,当前字符是选中的了吧。
如何跟linux一样呢?
Reply
Dante on #
我在windows试了一下是正常的哦,你是不是对光标做了配置。
Reply
Y-- on #
-_- 果然,win下gvim默认有一段vimrc的,非常感谢博主~
Reply
zhangqin on #
博主,你好,请问这个是什么问题 E488: Trailing characters 呵呵
Reply
Dante on #
呃,一般是字符不对
Reply
wing on #
博主你好, 你的文章相当实用.
这次有问题请教:
我在运行lua, python之类的程序时候, 一般是以 :!lua % 之类来启动的, 但是有时候需要在运行的时候再查看源码, 这时候切换回来就卡的要命...
然后我想到的是以:!start lua % 来解决... 但是这回不但命令增长了,还要添加额外的语句来让程序停下来.
请问您有碰到这样的问题没? 应该如何解决?
谢谢了 :)
Reply
Mocker on #
windows下,cd到工程目录无法生成.out,cscope: no source files found,神马情况。只有files文件
Reply
Mocker on #
找到问题了,貌似是中文路径的问题
Reply
xxx on #
见过的最烂的教程,没有之一
Reply
Dante on #
如果想学别人东西的人都是你这种态度,我很担心互联网上是否还有人愿意分享。
Reply
xcxinghai on #
你好,看了您的博客,现在c++的代码终于可以自动补全了。但是在补全的代码的时候还有点缺陷。就是弹出的选择的函数的背景颜色是粉红色,选择哪一个函数则是黑色,而我的vim的背景颜色是黑色,所以,最上面喝最下面的函数被选择时,看得很不明显。不知到可不可以自己设置颜色,补全时候的背景?
Reply
Dante on #
可以换个配色,比如 wombat
Reply
quhuazhou on #
博主你好,这个文章非常好,我想问下taglist.vim在哪个地方可以下载,谢谢了~
Reply
quhuazhou on #
博主请问我读的是android4.1.4的文件系统,如果文件系统更新了,cscope.files和tags也要重新生成么,由于文件系统太大,可不可以只找到改动的地方然后只为改动的地方更新上述2个文件
Reply
Dante on #
我现在已经基本不用cscope了,只用ctag,ctag是支持单独生成某个目录的tags再加载的
Reply
fouvy on #
建议楼主把
map :silent! TlistOpen "按下F3就可以呼出了
这样呼出来之后就可以选择跳到哪个函数拉,(*^__^*) 嘻嘻……
Reply
book on #
博主你好,请问你使用的是shell下的vim,还是gvim呢?在shell下用vim,像ctags定位之类的会不会很不方便?
Reply
lyj on #
您好,看了您的教程,收益颇多,我这里出现了问题,麻烦您解答一下,在vim下敲击F12后,vim会白屏,不知道这是什么状况?
Reply
番茄红素 on #
貌似效果很不错
Reply
土豆 on #
求教:我在虚拟机上装了个ubuntu 10.10,上面默认安装的不是ctags,而是etags,这样对咱们的脚本有影响么?
自动安装时会把ctags自动添加到path里吧??
Reply
Dante on #
没试过。。。
Reply
qij on #
d
Reply
Danny on #
请教,我在好几层下用VIM中的Ctrl + ]跳转说找不到这个函数,因为这个函数定义在上上层的另一个文件夹的文件中,请问博主如何解决啊?
我试过在项目的根目录执行ctags -R,可是不管用
- -!
Reply
迷城幻境 on #
博主你好 请教一下 装了ctags和cscope之后并在.vimrc中配置了 为什么一点F12vim就会白屏?而且用鼠标在空的区域内选取就有可以看到了.
Reply
vvyang on #
博主,你好,按照你的分享设置VIM,感觉不错,这里第49行,貌似多了一个双引号(“),在mac下ctags没有-R参数,需要从新安装一个。还有我这跟lyj和迷城幻想一样,使用F12之后,会白屏,不知道怎么回事。
Reply
波儿 on #
白屏的解决办法:
在上面的Do_CsTag()函数的函数体最后一行插入:
execute "redraw!"
建议博主大大也把这句加入您的代码示例中。
Reply
icewater on #
g:vimrc_iswindows
g:iswindows
这两个变量名不一致,下面Do_CsTag()中语句
if(g:iswindows==1)
调用g:iswindows变量是否应改为
if(g:vimrc_iswindows==1)
Reply
icewater on #
感谢楼主花时间分享vim教程
g:vimrc_iswindows
g:iswindows
这两个变量名不一致,下面Do_CsTag()中语句
if(g:iswindows==1)
调用g:iswindows变量是否应改为
if(g:vimrc_iswindows==1)
这个问题搞了我好长一段时间,改回来之后按F12就可以生成tags,
再次感谢
Reply
belonger on #
博主 你好 , 我照你的方法做了。但是在代码补全时提示 “报全能补全(^O^N^P)找不到模式)”,在我的代码根目录下都生产了*out tags 等文件了
Reply
Willie on #
博主,你好,我照着你的教程设置到2后,按下F12后没反应,然后在命令行下提示的错误信息为:ctags: Warning: cannot open source file "myfile" : No such file or directory
想请问你一下,我这个问题是出在哪里,我没有建有“myfile”啊,我试着找了很多资料,但是没有解决,所以想请教你一下!谢谢!
Reply
火冷 on #
请问这里能搜索博文吗?有方法能方便地找到打造IDE的第1篇?
Reply
Dante on #
右上角可以了。。之前不小心把搜索框搞丢了。
Reply
火冷 on #
哈哈,网上都说youcompleteme很好用,博主没去试??还想找这个插件的windows版安装教程哈
Reply
Dante on #
试过,是还不错,做了很多优化来提升提示的速度,但是感觉还是太卡,就卸载掉了。
Reply
Ocean on #
博主你好,本人新手,在配置的时候把你的代码粘帖了过来,按F12后不会加载出来,终端上闪过 ctags:warning:cannot open source files ".mozilla.firefox/..." 还有能不能详解一下怎样将执行程序加入环境变量,十分感谢
Reply
岩会 on #
念洋,检查配置用的变量为:g:vimrc_iswindows在后面使用的时候,使用的是:g:iswindows
Reply
huhuhaha on #
首先确认安装了ctags和cscope,咋安装啊,说明白点行不?
Reply
sed2x on #
[?1049h[999;999H[6n[1;1H[J[2;1H~[3;1H~[4;1H~[5;1H~[6;1H~[7;1H~[8;1H~[9;1H~[10;1H~[11;1H~[12;1H~[前有<-好像是回车符行号连起来了,qiuzhu ? huifu EMAIL 也可
Reply
huixinming on #
Hi,博主你好,想请教下为什么我的显示不出来函数列表,我按F12生成了tags,然后按F3,提示“:silent! Tlist”,但就是不出现函数列表,源文件所在的目录也没有中文字符~
Reply