由于工作需要,所以最近ssh到服务器上写代码的时间越来越多,反而在本地用gvim写代码的机会却少了,所以工作方式上也就发生了一点变化。
由于ctags本身在windows下运行效率的瓶颈(还有gvim对tags文件的检索),我在windows下面很少愿意提前装载tags的,不过在linux下就完全不一样啦,即使几百兆的工程 tags,在linux下面配合Omnicppcomplete进行全能补全也是速度飞快的。
下面是一些我常用的操作:
一.手动加入、删除文件所在目录的tags文件到vim的tags搜索中
map cta :call Add_tags()<CR>
map ctd :call Del_tags()<CR>
function Add_tags()
let dir =expand("%:p:h")
let curtags = dir.g:vimrc_splitstr."tags"
let curtags=substitute(curtags,'\\','\','g')
if filereadable(curtags)
exec "set tags+=".curtags
echohl WarningMsg | echo "Succ to add tags![".curtags."]" | echohl None
else
echohl WarningMsg | echo "Fail to add tags! No tags in this file's path.[".curtags."]" | echohl None
endif
endfunction
function Del_tags()
let dir =expand("%:p:h")
let curtags = dir.g:vimrc_splitstr."tags"
let curtags=substitute(curtags,'\\','\','g')
exec "set tags-=".curtags
if filereadable(curtags)
echohl WarningMsg | echo "Succ to del tags![".curtags."]" | echohl None
else
echohl WarningMsg | echo "Succ to del tags! But no tags in this file's path.[".curtags."]" | echohl None
endif endfunction
这样在普通模式下,按下 cta 就是加载当前文件所在目录的tags,按下 ctd 是取消加载。
在vim输入:set tags就可以看到有哪些tags当前已经被加载。
至于怎么生成tags文件,这里就不多说了,可以在我的博客里搜索ctags,就能找到很多相关的文章。
二.预加载一些定义好的tags文件
au FileType cpp,c set tags+=$VIMEXTRA/tags/stl_tags
au FileType cpp,c set tags+=$HOME/Farm/trunk/tags
au FileType cpp,c set tags+=$HOME/baseplatform/tags
意思就是在文件类型是cpp或者c的时候自动加入这3个tags。
这里只是提供一种方法。
三.一点使用的小技巧
1)ctags本身不会对局部变量尽心扫描,所以当你在函数内遇到一个变量又想要知道他定义的地方时,就按下gd就可以啦。
2)当使用]进行函数、变量定义跳转的时候,如果出现多个结果的情况,想要进行选择的话,可以使用 :ts 命令列出选择。
3)这一点可能比较小众,当在自己写脚本想要动态加入一个tags的时候,直接执行
let str = "~/test_tags" set tags += str
是不行的,而是需要用
exec "set tags+=".str
其实上面的代码已经这样写了,呵呵,这里只是再废话一次。
OK,就写这么多~~~
----------------------我是分割线---------------------------
下面是一段我和公司pm的对话,挺有意思:
pm:自从我不用wps,而用editplus做报告之后,效率果然提高了很多啊,不用再在写文字的时候去考虑格式啦 me:你可以尝试下vim,绝对比editplus要更快5~10倍 pm:其实我主要是喜欢editplus那个生成模板的功能 me:vim可以实现的,而且更加智能。
(简单一点的有本博编写的load_template,高级的有snipmate等,都在www.vim.org可以搜到) pm:我还比较喜欢在editplus中竖向选择 me:在vim里那叫列模式,ctrl+v就行 pm:用vim要记的快捷键太多啦 me:让手指比大脑快就行…… 呵呵,其实不是想说editplus就是比vim差啦,只是觉得editplus的确满足不了自己作为程序开发者的大量需求。
像我给老婆推荐编辑器的时候就没有推荐vim,而是推荐了emeditor(不保证以后不会给她推荐),因为足够她用了~~ 所以,还是找到适合自己的,才是最好的。
佚之狐L on #
博主好,近两天一直在这儿学习。有一个小问题,关于Windowsxp下Gvim的中文字体,按博主的方法:“set guifont=Arial_monospaced_for_SAP:h9:cANSI
set gfw=幼圆:h10:cGB2312”,第一句正常,第二句中文的,比如我用微软雅黑,也会正常的报错,但用幼圆这种不报错的中文字体却也无任何效果,用YaHei.Consolas.1.12,写成“set gfw=YaHei_Consolas_Hybrid:h10:cGB2312”也不报错,但无效果。Vim是官网下的7.2,系统是简体中文的XPsp3home,_vimrc是gbk还是cp936(不管一不一样)都试过了,都不行,来问问BZ,这会是哪儿的问题呢?
Reply
Dante on #
咦,听你的描述应该和我的环境一模一样呀,按理说应该是没有问题的呢……,你这里的没有效果是指中文字体没有变化对吧,奇怪了……
那个设置cp936那里,你是用set fenc=cp936这行命令吧?
Reply
佚之狐L on #
博主回复真快。对,我用“set fenc=cp936”和“set fenc=gbk”都试过了,在gvim中中文一点变化都没有。
Reply
Dante on #
刚出去买东西啦~
奇怪,没道理呀,vim认不出来这些编码么……
能在打开_vimrc之后,执行:set fenc看一下是什么编码不?
Reply
梧桐 on #
重转字体,我刚刚就是这么解决的
Reply
Dante on #
重转字体?啥意思?
Reply
吴叔 on #
重装,嘿嘿,打错了.
Reply
依云 on #
exec "set tags+=".str 也可以写成 let &tags.=str
那段对话很有意思:-)
Reply
Dante on #
这样也行呀,呵呵,多谢依云兄指教~~
那段对话侧面反映了一下vim的强大功能,哈哈
Reply
iOver on #
看来我对 vim的了解还是太少了。
UC订阅了贵博,以后会经常来取经了。 博主加油!
Reply
Dante on #
哈哈,加油加油~
Reply
iOver on #
建议博主加一个评论邮件回复功能。这样的插件还是比较多的.
不然,除非读者主动查看博客的旧文,否则即使博主回复了,读者还是看不到。体现不出交流与互动了。
Reply
Dante on #
哈哈,已经OK啦~之前的WP Thread Comment设置有问题~~
看看能收到邮件不?
Reply
alexandercer on #
1. win32下ctrl-v是默认指定为粘贴的功能的,所以gvim的win32的列模式一般是ctrl+q.
2. 另外,列模式其实不叫列模式,真正的叫法是叫块模式,blockwise.
Reply
Dante on #
多谢指正~~ 呃,因为我在windows下用gvim也是把windows的相关映射都删掉的,毕竟经常ssh到服务器上去,所以要保证操作习惯的一致~~
Reply
alexandercer on #
呵呵...个人习惯吧...
Reply
shw1395 on #
刚从emeditor转到vim
非常不习惯
正则和文件中搜索这两个功能要是比emeditor更快更方便。那这种转移成本还是值得的考虑的。
Reply
Dante on #
这两天都不在公司,所以回复有点慢,我用vim之前也是用em,vim的正则和搜索要远强于em,呵呵,加油!
Reply
lihex on #
一直在学习并使用vim,感谢博主更新vim使用心得,我学到了不少经验,希望再接再励。
今天又学到了一招ctrl + v 竖选模式,哈哈
Reply
Dante on #
哈哈,加油!
Reply