最后更新于 .

由于工作需要,所以最近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(不保证以后不会给她推荐),因为足够她用了~~ 所以,还是找到适合自己的,才是最好的。

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 佚之狐L

    佚之狐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

    1. Dante

      Dante on #

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

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

      Reply

      1. 佚之狐L

        佚之狐L on #

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

        Reply

        1. Dante

          Dante on #

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

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

          Reply

          1. 梧桐

            梧桐 on #

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

            Reply

            1. Dante

              Dante on #

              重转字体?啥意思?

              Reply

              1. 吴叔

                吴叔 on #

                重装,嘿嘿,打错了.

                Reply

  2. 依云

    依云 on #

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

    Reply

    1. Dante

      Dante on #

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

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

      Reply

  3. iOver

    iOver on #

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

    Reply

    1. Dante

      Dante on #

      哈哈,加油加油~

      Reply

  4. iOver

    iOver on #

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

    Reply

    1. Dante

      Dante on #

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

      看看能收到邮件不?

      Reply

  5. alexandercer

    alexandercer on #

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

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. alexandercer

        alexandercer on #

        呵呵...个人习惯吧...

        Reply

  6. shw1395

    shw1395 on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  7. lihex

    lihex on #

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

    Reply

    1. Dante

      Dante on #

      哈哈,加油!

      Reply

发表评论