由于工作需要,所以最近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(不保证以后不会给她推荐),因为足够她用了~~

所以,还是找到适合自己的,才是最好的。

Vim(gVim)对排序的妙用

前段时间有博友在群里问了一个关于vim排序的问题,因为时间问题一直没帮忙解决,今天时间正好空出来,就帮忙搞了一下。 原文的问题如下: ...

阅读全文

vim(gVim)统计字节、字符数

前段时间在做文件扫描的时候,有一些关于字节、字符数统计的需求,考虑到有同学也可能用的到,所以整理一下记录在这里。 1.统计当前字符之前的所有字节数 ...

阅读全文

糗事百科网站改版,对应qiushibaike.vim插件升级

前不久糗百改版,所以原有的qiushibaike.vim插件用起来会有一些问题,今天有时间就修改了一下. 如图: 下载地址: http://www.vim.org/scripts/script.php?scr...

阅读全文

20则回应给“在vim(gvim)中使用ctags(2)-奇技淫巧”

  1. 佚之狐L说道:

    博主好,近两天一直在这儿学习。有一个小问题,关于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,这会是哪儿的问题呢?

    [回复]

    Dante 回复:

    咦,听你的描述应该和我的环境一模一样呀,按理说应该是没有问题的呢……,你这里的没有效果是指中文字体没有变化对吧,奇怪了……

    那个设置cp936那里,你是用set fenc=cp936这行命令吧?

    [回复]

    佚之狐L 回复:

    博主回复真快。对,我用“set fenc=cp936”和“set fenc=gbk”都试过了,在gvim中中文一点变化都没有。

    [回复]

    Dante 回复:

    刚出去买东西啦~
    奇怪,没道理呀,vim认不出来这些编码么……

    能在打开_vimrc之后,执行:set fenc看一下是什么编码不?

    [回复]

    梧桐 回复:

    重转字体,我刚刚就是这么解决的

    [回复]

    Dante 回复:

    重转字体?啥意思?

    [回复]

    吴叔 回复:

    重装,嘿嘿,打错了.

    [回复]

  2. 依云说道:

    exec “set tags+=”.str 也可以写成 let &tags.=str
    那段对话很有意思:-)

    [回复]

    Dante 回复:

    这样也行呀,呵呵,多谢依云兄指教~~

    那段对话侧面反映了一下vim的强大功能,哈哈

    [回复]

  3. iOver说道:

    看来我对 vim的了解还是太少了。
    UC订阅了贵博,以后会经常来取经了。 博主加油!

    [回复]

    Dante 回复:

    哈哈,加油加油~

    [回复]

  4. iOver说道:

    建议博主加一个评论邮件回复功能。这样的插件还是比较多的.
    不然,除非读者主动查看博客的旧文,否则即使博主回复了,读者还是看不到。体现不出交流与互动了。

    [回复]

    Dante 回复:

    哈哈,已经OK啦~之前的WP Thread Comment设置有问题~~

    看看能收到邮件不?

    [回复]

  5. alexandercer说道:

    1. win32下ctrl-v是默认指定为粘贴的功能的,所以gvim的win32的列模式一般是ctrl+q.

    2. 另外,列模式其实不叫列模式,真正的叫法是叫块模式,blockwise.

    [回复]

    Dante 回复:

    多谢指正~~ 呃,因为我在windows下用gvim也是把windows的相关映射都删掉的,毕竟经常ssh到服务器上去,所以要保证操作习惯的一致~~

    [回复]

    alexandercer 回复:

    呵呵…个人习惯吧…

    [回复]

  6. shw1395说道:

    刚从emeditor转到vim
    非常不习惯
    正则和文件中搜索这两个功能要是比emeditor更快更方便。那这种转移成本还是值得的考虑的。

    [回复]

    Dante 回复:

    这两天都不在公司,所以回复有点慢,我用vim之前也是用em,vim的正则和搜索要远强于em,呵呵,加油!

    [回复]

  7. lihex说道:

    一直在学习并使用vim,感谢博主更新vim使用心得,我学到了不少经验,希望再接再励。
    今天又学到了一招ctrl + v 竖选模式,哈哈

    [回复]

    Dante 回复:

    哈哈,加油!

    [回复]

发表评论