最后更新于 .

好了,接著前面的兩篇,我們今天來寫《把VIM打造成一個真正的IDE》系列的終結篇。

我們之前已經讓在VIM下看代碼變得方便與簡單,現在我們來讓用Vim寫代碼也一樣方便~看完本篇之后,你就可以完全拋棄sourceinsight之類的工具啦~

3)omnicppcomplete.vim 實現寫C/C++語言時自動補全  下載插件

慣例,先截圖:

其實使用很簡單,下載 omnicppcomplete 然后按照說明將插件安裝到vimfiles下面,目錄結構如下:

    after\ftplugin\cpp.vim
    after\ftplugin\c.vim

    autoload\omni\common\debug.vim
                        \utils.vim

    autoload\omni\cpp\complete.vim
                     \includes.vim
                     \items.vim
                     \maycomplete.vim
                     \namespaces.vim
                     \settings.vim
                     \tokenizer.vim
                     \utils.vim

    doc\omnicppcomplete.txt

然后需要生成tags,哈哈,記得我們之前用F12映射的命令吧(把Vim打造成真正的IDE(2)),按下F12然后去享受吧~~ 順便說一下:omnicppcomplete會打開一個預覽窗口來提示變量定義,如果不想要看到詳細的信息的話,在vimrc中這樣配置:

set completeopt=menu

4)NERD_commenter.vim 注釋插件 下載插件

也是程序員非常實用的一款插件,支持各種語言的補全,只要你能想到的,放心他絕對注釋的了,而且還支持單行注釋,批量注釋,等各種命令映射,在這里,我把最常用的鍵映射在vimrc中配置了一下。

"對NERD_commenter的設置
let NERDShutUp=1

這樣的話,在光標所在行上,按下一次ctrl+h是注釋,再按下一次是取消注釋。 而其內建的指令,cm是多行注釋,類似C++的/**/,,cu是取消注釋。

5)DoxygenToolkit.vim 由注釋生成文檔,并且能夠快速生成函數標準注釋 下載地址 這個插件使得vim能夠生成標準的函數注釋,如圖:

map fg : Dox<cr>
let g:DoxygenToolkit_authorName="dantezhu"
let g:DoxygenToolkit_licenseTag="My own license\<enter>"
let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK"
let g:DoxygenToolkit_briefTag_pre = "@brief\t"
let g:DoxygenToolkit_paramTag_pre = "@param\t"
let g:DoxygenToolkit_returnTag = "@return\t"
let g:DoxygenToolkit_briefTag_funcName = "no"
let g:DoxygenToolkit_maxFunctionProtoLines = 30

讀者可以需要將 DoxygenToolkit_authorName設置成為自己的名字,OK,這樣標準格式的代碼注釋就出來啦。

5)a.vim .cpp和.h文件快速切換 下載地址 把下載的a.vim放到plugin下,不需要配置。 直接可以:A,打開.cpp和.h對應的文件,:AV,打開.cpp和.h對應的文件,并且分屏,截圖如下:

AV

OK,如果你按照我的說明將vim配置了下來,那么你的vim應該已經是一個超級強悍的IDE啦,快去寫寫代碼試試吧,是不是和之前很是不同了啊,哈哈。

Pingbacks

  1. 學習vim | 學編程 on #

    [...] 把VIM打造成一個真正的IDE(3) [...]

  2. gvim安裝和配置 | Xeno Joshua on #

    [...] “把VIM打造成一個真正的IDE”系列貼,感覺不錯:分為篇1、篇2、篇3 [...]

  3. vim配置攻略-打造自己的IDE | Cherrot on #

    [...] 把VIM打造成一個真正的IDE(3) [...]

  4. 用VIM打造屬于自己的IDE | fumin&#039;s blog on #

    [...] [1] 把VIM打造成一個真正的IDE(1) [2]?把VIM打造成一個真正的IDE(2) [3] 把VIM打造成一個真正的IDE(3). [4] Vim的快速注釋插件NerdCommenter 此條目由 fumin 發表在 Linux [...]

  5. 把VIM打造成一個真正的IDE | Anntony&#039;s personal blog on #

    [...] 把VIM打造成一個真正的IDE(3) [...]

  6. 把VIM打造成一個真正的IDE | Anntony&#039;s personal blog on #

    [...] OK,到這里,我們已經能夠成功的顯示函數列表和查看函數定義了,閱讀代碼已經沒有問題了,剩下的就是要在寫代碼過程中用到的插件啦,我們在把 VIM打造成一個真正的IDE(3)中繼續~ [...]

  7. 關于vim的問題 - Linux/Unix - 開發者第1834485個問答 on #

    [...] 把VIM打造成一個真正的IDE(3) 回復7樓 &#8211; hqin6:lz感興趣可以試試http://www.vim.org/&nbsp;&nbsp;這里好多插件~~~ [...]

  8. Mac開發利器之程序員編輯器MacVim學習總結 | 貝明-日月明心 梵冊貝葉 on #

    [&#8230;] 把VIM打造成一個真正的IDE(3) [&#8230;]

Pingbacks已打開。

Trackbacks

引用地址

評論

  1. isunbo

    isunbo on #

    3篇文章都看完了,但還是有些問題,showfunc.vim插件完全沒有效果,omnicppcomplete.vim插件也有問題,提示" -- 全能補全 (^O^N^P) 找不到模式",a.vim插件,使用":AV"命令時新窗口出現在左側.
    只有注釋插件能正常使用.
    我在用戶變量里是這么寫的path=D:\ConsoleTools;D:\MinGW\bin;
    ConsoleTools目錄里有ctags.exe和cscope.exe
    cscope是在http://sourceforge.net/projects/mslk/下載的.有3個文件(cscope.exe和regex2.dll和curses2.dll)

    Reply

    1. Dante

      Dante on #

      嗯啊,關于omnicppcomplete的問題應該是沒有生成tags……一定要按照我給的那個命令生成啊,直接!ctags -R 生成的是沒有用的。a.vim是默認在左側分屏哦,好像有配置是可以改的,具體我沒有去看,感覺應該夠用了,你可以看一下它的官方介紹~ 環境變量應該配置的沒有問題,按F12沒有效果嗎?

      Reply

  2. yelo

    yelo on #

    你好

    能曬曬你的vimrc嗎?

    Reply

    1. Dante

      Dante on #

      哇咔咔,當然啦,最近就打算寫出來啦~~應該就這幾天啦~嘿嘿

      Reply

  3. absolute8511

    absolute8511 on #

    在Vim里面編譯和調試的功能啥時候介紹阿,還有svn等等,期待ing

    Reply

    1. Dante

      Dante on #

      哈哈,感謝支持啊,vim中編譯調試已經有一篇文章哦:
      http://www.vnchuangji.cn/2009/10/11.html

      關于調試和svn兩個功能實際上我之前都有用過相關的插件,但是當時插件還不成熟,所以就沒有再細究,這一點倒是提醒了我哦,我一定會安排時間梳理下這些相關功能滴~~ 嘿嘿

      Reply

  4. iam070

    iam070 on #

    你好,我是vim新手。我看到你的這篇文章,講的

    omnicppcomplete的插件,我下了插件,里面只有3個目錄doc autoload after,沒有你說的那個目錄結構里的文件啊。
    /////////////
    after\ftplugin\cpp.vim
    after\ftplugin\c.vim
    autoload\omni\common\debug.vim
    \utils.vim
    autoload\omni\cpp\complete.vim
    \includes.vim
    \items.vim
    \maycomplete.vim
    \namespaces.vim
    \settings.vim
    \tokenizer.vim
    \utils.vim
    doc\omnicppcomplete.txt
    //////////////

    Reply

    1. iam070

      iam070 on #

      我知道了,你這個沒有正確縮進=.=

      不過我的omnicppcomplete的插件依舊沒有正常工作, 難道跟supertab插件有關?

      Reply

      1. Dante

        Dante on #

        呃,沒有嘗試過supertab,我覺得c-x c-o挺好的……,你確定tags正確生成了嗎?

        Reply

        1. iam070

          iam070 on #

          昨天晚上再弄了一下,弄好了,原先功能已經生效了的,但我沒有意識到是oni---的作用=.=

          對了,你在 打造 IDE(2)那篇文章里提供的 showfunc.vim 有點問題,怎么弄都不可以使用,最后下了原版的echofunc.vim 才可以的。

          Reply

        2. iam070

          iam070 on #

          還有 map fg ,這個fg到底是指那個功能鍵?

          Reply

      2. Dante

        Dante on #

        汗,沒法再嵌套了,fg就是普通模式下,按fg兩個字母……

        Reply

  5. iam070

    iam070 on #

    我想自動補全c語言標準庫函數,補全插件已經裝好了,現在就是需要添加標準庫函數的tags,不過我一直沒弄好。

    到include執行ctags -r *.*,把得到的tag,挪動到VIM目錄下的tags/stdlib中,然后在_vimrc文件末尾添加 set tags+=/$VIM/tags/stdlib

    不過這樣不行。

    不知道哪里錯了,你有什么教程嗎?

    Reply

    1. iam070

      iam070 on #

      原先的步驟已經有錯誤,不過參照你的讓C++支持STL自動補全,可以顯示STL,但C語言標準庫還是不行

      Reply

      1. Dante

        Dante on #

        呵呵,這個本來就是補全C++ STL庫的,不知道C補全的具體意思是指?

        Reply

        1. iam070

          iam070 on #

          我知道是你的那篇文章是針對C++STL的,不過我只使用c,所以想針對c語言的標準函數庫做一個補全tag,結果沒有成功,不知道為什么。

          Reply

  6. iam070

    iam070 on #

    問題出錯在我原先給的include文件補全,所以沒法生成正確的tags.

    現在好了,哈。

    對于自動補全,現在試驗了幾個插件,感覺
    autocomplpop+code_complete不錯,原先的supertab會跟code_complete沖突。。

    可以看看這個鏈接http://hi.baidu.com/timeless/blog/item/cb4478f09a1563ca7931aa5d.html

    現在還有幾個問題,
    1、跟code_complete的tab還是有沖突,我想把鏈接中設定的 按Tab鍵在補全菜單中選擇 改為按SHIFT鍵,不知道為何貌似不存在,只有這樣的。。

    2、在插入模式下,如何快速的移動光標?比如到行首和行尾。是不是需要自己綁定,比如&lt;c- 移動到行首

    Reply

  7. ideepblue

    ideepblue on #

    omnicppcomplete.vim
    只是復制文件就夠了么?不用設置別的?我復制了文件。然后怎么使用?

    NERD_commenter.vim
    我放在$VIMRUNTIME\plugin 下了,vimrc也編輯了可是使用起來沒效果……Ctrl + H無用 cm也不行

    難道有其他設置么?

    望博主答復~謝謝~

    Reply

    1. MadPer

      MadPer on #

      NERD_commenter.vim的話,是不是要在vimrc里加上
      "對NERD_commenter的設置
      let NERDShutUp=1
      "支持單行和多行的選擇,//格式
      map ,c
      上面四行?博主有提到,是不是您忘了?
      如果還是不行,不妨試試comments.vim 這款插件,直接復制到插件目錄就行,ctrl+c是注釋,ctrl+x是取消注釋,支持多種文件,支持批量注釋~

      Reply

    2. Dante

      Dante on #

      突然想起來,你是不是文件類型檢查沒有打開呢?
      filetype plugin on

      Reply

      1. ideepblue

        ideepblue on #

        沒開這個……單行注釋解決了,可是多行注釋cm不行……

        Reply

        1. Dante

          Dante on #

          呵呵,需要你打開的文件類型支持多行注釋才行哦,比如C++,但是python的話就不支持的~~~

          Reply

          1. ideepblue

            ideepblue on #

            C不支持多行?
            python不支持有點遺憾

            Reply

            1. Dante

              Dante on #

              C肯定支持呀……

              你是不是沒有輸入對命令?
              ,cm

              Reply

              1. ideepblue

                ideepblue on #

                ,cm 暈 我直接cm的…… 博主你應該加一下引號

                Reply

            2. iMadper

              iMadper on #

              python不支持這個是python自己的問題...想多行注釋python的話就ctrl + v,選種你要注釋的那些行,然后shift+i,然后輸入#,然后安兩下esc...更簡單的就是用comment.vim插件,直接在普通模式下,輸入數字(你要注釋的行數)然后ctrl+c,當然了,也可以選中你要注釋的文字,然后再ctrl + c. 不過這個只不過是把那些語句都用單行注釋給注釋了罷了...不算是多行注釋...不過用這個插件注釋c的時候用的是多行注釋的說~

              Reply

      2. Rapunzel

        Rapunzel on #

        nerd comment這個設置好了
        剛看過filetype也是開著的
        但是ctrl+h還是沒有反映
        到底是為什么呢
        望回答 謝謝

        Reply

  8. ideepblue

    ideepblue on #

    博主又有新問題了……
    omnicppcomplete.vim這個
    filetype plugin on
    set nocp
    也有寫在vimrc中

    omnicppcomplete壓縮包中三個目錄,放在~/.vim/ 下,放在 ~/.vim/vimfiles 都試過了 ^X^O的結果就是找不到模式

    是說omnicppcomplete只能匹配 "." 或者 "-&gt;" 或者 Class 的東西么?不能匹配函數?

    Reply

    1. Dante

      Dante on #

      呃,我也只匹配類內部的函數,單獨的C函數的話,好像確實匹配不了。

      Reply

      1. ideepblue

        ideepblue on #

        有個問題很詭異 同一套配置文件vimrc 在win gvim下c++的public private protected關鍵詞都能正常高亮

        但是在linux vim下 只要public加了":"冒號,高亮就消失了,win下沒消失

        何解?博主碰到過么?

        Reply

        1. Dante

          Dante on #

          呃,會這樣嗎?從來沒有遇到過呢,是不是vim的版本不一樣?

          Reply

      2. ideepblue

        ideepblue on #

        呃 我知道了 配色方案的問題……杯具

        Reply

  9. 張慧聰

    張慧聰 on #

    能否再介紹一下怎么把gdb揉進去?

    Reply

    1. Dante

      Dante on #

      嗯啊,因為自己一直沒有用過集成gdb的需求,所以一直沒有試過,已經好多朋友問過我這個問題了,還有集成svn操作,呵呵,我一定抽時間寫一下~

      Reply

    2. iMadper

      iMadper on #

      有個vimgdb插件的,不過要在編譯前加上個補丁.看你嫌不嫌麻煩了.

      Reply

      1. Dante

        Dante on #

        呃,其實我真的覺得,用Conque Shell更簡單一些……

        Reply

  10. Nelson

    Nelson on #

    博主啊,,最近剛開始在Linux下用vim,有個很郁悶的問題想請教一下你哈、

    關于那個set mapleader = “,”,我的vimrc是完全按照那位史上最牛的vimrc做的,為什么我這個 功能好像失效了。
    就是在普通模式下按任何與有關的mapping都不行,例如e: e ~/.vimrc中,按“,e” 進入不了.vimrc,很郁悶啊。。。
    博主有什么建議嗎??

    Reply

    1. Nelson

      Nelson on #

      補充一下剛才的帖子,
      按任何與有關的mapping都不行,例如e: e ~/.vimrc中

      Reply

      1. Nelson

        Nelson on #

        哇,,,為什么我寫的“ ” 都不見了,,奇怪

        Reply

        1. Nelson

          Nelson on #

          博主,我終于找到問題了,原來我裝了兩個VIM,我一直在修改的是另外一個VIM的vimrc,囧

          Reply

          1. Dante

            Dante on #

            呵呵,我出去剛回來……
            找到問題就好啊,wordpress會自動轉義",是挺奇怪~~

            Reply

  11. Lees

    Lees on #

    樓主你好,我想問一下在windows下用VIM能夠斷點運行么?能的話能否告之?謝謝了

    Reply

    1. Dante

      Dante on #

      呃,好像是有一個和gdb結合的插件,不過我沒用過,可以goolge一下看看~~

      Reply

      1. Lees

        Lees on #

        哦,謝了,我去找找看

        Reply

  12. 執著的初心

    執著的初心 on #

    三篇看完了 感覺沒啥幫助啊。

    vim能不能直接調用一個tcl文件,或者是do文件,或者批處理文件?
    并且把cmd返回的信息顯示出來?

    Reply

    1. Dante

      Dante on #

      呃,我遇到需要命令回顯的情況都會直接在vim腳本中使用python(vim原生支持python腳本),用純vim腳本調用命令還要抓取回顯的數據還真沒試過。

      Reply

    2. Dante

      Dante on #

      呃,沒說完,python中用popen,呵呵

      Reply

  13. 渡水的瘋子

    渡水的瘋子 on #

    請問omnicppcomplete能否對自定義的類在::后補全類成員,比如自定義Class A,然后在輸入A::的時候補全A中的成員。我已經設了let OminiCpp_MayCompleteScope=1,對于STL中的類如string::均有補全提示,自定義的不行。

    Reply

    1. Dante

      Dante on #

      肯定可以啊,我一直是這樣用啊,只要生成一下tags就可以了。

      Reply

      1. 渡水的瘋子

        渡水的瘋子 on #

        .和-&gt;都可以,但是在Myclass::后就是提示找不到模式

        Reply

        1. Dante

          Dante on #

          我試了一下沒問題。

          #include <iostream>
          #include <string>
          #include <vector>
          #include <map>
          using namespace std;
          class A
          {
          public:
          static int f;
          };
          int main(int argc, const char *argv[])
          {
          A::f = 1;
          return 0;
          }

          你忘記寫static了吧

          Reply

          1. 渡水的瘋子

            渡水的瘋子 on #

            嗯!幫助文檔中中漏看了這一項,默認是根據當前域決定補全那些內容,類定義外確實要static的,不過設了DisplayMode=1就搞定了,多謝指教!

            Reply

  14. patience

    patience on #

    樓主你好:
    安裝了omnicppcomplete后,為什么不能自動彈出匹配窗口呢?命令窗口中提示“用戶自定義補全(^U^N^P)找不到模式”,必須按下才能彈出匹配窗口。

    Reply

  15. patience

    patience on #

    補充:
    按下ctrl-x ctrl-o才能彈出匹配窗口,不自動彈出。

    Reply

    1. Dante

      Dante on #

      其實我倒是覺得不自動彈出比較好哦,自動彈出的話會感覺比較卡。
      如果要實時匹配的話,建議試一下NeoComplCache,對輸入速度的影響比較小。不過即使這樣我也不太喜歡自動匹配。。。

      Reply

      1. patience

        patience on #

        確實如此,現在設置好了自動彈出,感覺挺煩的~~~

        Reply

  16. zybest

    zybest on #

    為什么我裝了omnicppcomplete.vim后,出現如下錯誤:

    處理 /home/king/.vim/plugin/after/ftplugin/c.vim 時發生錯誤:
    第 2 行:
    E117: 未定義的函數: omni#cpp#complete#Init
    處理 /home/king/.vim/plugin/after/ftplugin/cpp.vim 時發生錯誤:
    第 2 行:
    E117: 未定義的函數: omni#cpp#complete#Init
    處理 /home/king/.vim/plugin/autoload/omni/cpp/complete.vim 時發生錯誤:
    第 12 行:
    E117: 未定義的函數: omni#cpp#settings#Init
    第 13 行:
    E121: 未定義的變量: g:OmniCpp_ShowScopeInAbbr
    E15: 無效的表達式: g:OmniCpp_ShowScopeInAbbr
    第 14 行:
    E121: 未定義的變量: g:OmniCpp_ShowPrototypeInAbbr
    E15: 無效的表達式: g:OmniCpp_ShowPrototypeInAbbr
    第 15 行:
    E121: 未定義的變量: g:OmniCpp_ShowAccess
    E15: 無效的表達式: g:OmniCpp_ShowAccess
    請按 ENTER 或其它命令繼續

    望博主指點下,謝謝:)

    Reply

    1. Dante

      Dante on #

      不可能呀?能說下操作系統,vim版本?

      Reply

      1. zybest

        zybest on #

        ubuntu 10.10
        vim 7.2.330

        Reply

        1. Dante

          Dante on #

          。。7.2應該也沒問題的,我之前一直在用。。
          你是全部解壓到.vim目錄嗎?不會少cp了文件吧?

          Reply

          1. zybest

            zybest on #

            我是在.vim中解壓的,應該沒有吧,不過我想問下
            after\ftplugin\cpp.vim
            after\ftplugin\c.vim

            autoload\omni\common\debug.vim
            \utils.vim

            autoload\omni\cpp\complete.vim
            \includes.vim
            \items.vim
            \maycomplete.vim
            \namespaces.vim
            \settings.vim
            \tokenizer.vim
            \utils.vim

            doc\omnicppcomplete.txt
            這個目錄里的.vim文件是要自己從網上下了放進去嗎,我解壓完omnicppcomplete后,每個目錄里就已經有對應的vim了,但是都是只有幾行簡單的代碼,我懷疑是不是這里我沒弄明白

            Reply

  17. blindsniper

    blindsniper on #

    博主請指教,在xp, vim73下:
    配置了filetype plugin on

    也按照你的配置做了:
    let NERDShutUp=1
    "支持單行和多行的選擇,//格式
    map ,c

    但是NERD_Commenter仍舊完全不起作用,在visual模式里無法輸入逗號這個命令,這是為什么呢?

    Reply

    1. Dante

      Dante on #

      不好意思,這個插件現在已經更新了。。不能這樣映射了。。
      你直接用,cc之類就可以進行注釋了。

      Reply

      1. blindsniper

        blindsniper on #

        悲劇,原來是我沒有設置let mapleader = ",",所以逗號一直不起作用,謝謝啦

        Reply

  18. langford

    langford on #

    Hi,您好,那個vim注釋插件的快捷健需要如何映射的,我按照默認的配置,注釋不起作用,請指教!

    Reply

    1. Dante

      Dante on #

      默認,cc就是可以用的,你嘗試打開一個.c的文件試一下?

      Reply

  19. yyzhou

    yyzhou on #

    想問問通過ssh鏈接主機的方式
    代碼提示能出現么?是不是必須得是GUI界面的才行啊?

    Reply

    1. Dante

      Dante on #

      可以,我一直是這樣用的。

      Reply

  20. springlie

    springlie on #

    只對于C/C++而言,omnicppcomplete插件與vim自帶的new-omin-complete的區別大嗎?

    Reply

    1. Dante

      Dante on #

      new-omin-complete?
      vim的萬能補全是要自己寫函數的吧?所以有了omnicppcomplete,我的理解是這樣,不知道對不對。。

      Reply

  21. Yarkee

    Yarkee on #

    照著本文使用ctags,發現用F12鍵來生成tags文件要等很久很久很久。后來才突然發現,我直接在家目錄上按F12,于是,ctags要為整個家目錄下所有文件生成tags,一個tags文件32M……

    Reply

    1. 依云

      依云 on #

      不得不說,你很有耐心。。。。我不止一次沒注意當前目錄,等了幾秒不耐煩了才發現不對,Ctrl-C!

      Reply

  22. gadmyth

    gadmyth on #

    如果java的omnicomplete能像omnicppcomplete一樣強大就好了

    Reply

    1. Dante

      Dante on #

      我記得大學學java的時候,用過一個windows下的插件,對java補全的支持很好,不過后來不用java,就都刪掉了。。。我找找看還能想起啥名字不。。

      Reply

    2. 依云

      依云 on #

      vjde 或者 javacomplete?

      Reply

    3. Dante

      Dante on #

      想起來啦,貌似是
      Vim Intellisense
      印象中對java的支持還不錯。。

      Reply

  23. yjjlyyj

    yjjlyyj on #

    博主,我想問下我把omnicppcomplete裝好后運行CTAGS后,那里只能自動彈出 struct的。像vector之類的都彈不出,是不是我裝的不對呀~

    Reply

    1. yjjlyyj

      yjjlyyj on #

      可以了,看了博主另一篇文章~~

      Reply

  24. Richard27

    Richard27 on #

    你好,請教個問題?不知你的cscope功能用得怎樣?我在使用時始終不是很順手

    Reply

    1. Dante

      Dante on #

      你好,2年前是有用過的。
      后臺覺得很多功能上有缺陷,所以只是用ctags了。
      如果需要查找調用方,就直接vimgrep了。。

      Reply

  25. Richard27

    Richard27 on #

    感謝你的答復,確如你所說,我在使用時,也遭遇了很多不便,ctags倒是不錯,能自動更新,不過畢竟功能有限,用vimgrep代替csope查找函數引用貌似不能實現準確搜索吧?你是直接把函數名當作簡單的字符串來處理的嗎

    Reply

    1. fanhe

      fanhe on #

      cscope 對c++的支持不怎么樣, 我一般用cscope直接搜索符號的.

      Reply

    2. Dante

      Dante on #

      嗯……搜索的時候實在不行就用上正則…,基本還是夠用的。

      Reply

  26. fanhe

    fanhe on #

    IDE, 我寫了一個, 現在剛好能用, 暫時支持 Linux, 后續慢慢完善功能啥的. http://www.vim.org/scripts/script.php?script_id=3647

    Reply

    1. Dante

      Dante on #

      不錯~~加油!

      Reply

  27. 小楊

    小楊 on #

    omnicppcomplete目錄下的.vim不知道往哪丟, 是全部丟:usr/share/vim/vim72/目錄下與之目錄名相同的目錄, 還是.vim文件全丟usr/share/vim/vim72/plugin下啊, 搞暈了...不過按F12當前文件目錄下有tags生成...?!先謝了, 大俠...

    Reply

    1. Dante

      Dante on #

      .vim相當于windows下的vimfiles哈。這樣應該就能理解了吧?

      Reply

      1. 小楊

        小楊 on #

        用的是ubuntu, 那ominicppcomplete下的目錄放:
        “/home/user/.vim/“, 這樣對吧....?!
        不過這樣放了以后, 沒看到效果啊...TnT

        Reply

  28. 小楊

    小楊 on #

    為什么在gvim下打開某目錄下的文件時, 沒有路徑自動補全呢?!
    例如要找開:/home/username/index.cpp

    在gvim下:

    :o /home/username/inde(此時按Tab, 目錄下以inde前輟開頭的文件只有index.cpp), 沒有補全, 什么原因啊..?!

    Reply

    1. Dante

      Dante on #

      使用 :e xxx 嗎?

      Reply

      1. 小楊

        小楊 on #

        呵呵,前加e:/home/...這樣就可以了, 還是經驗不夠哇...^^

        Reply

  29. More.YU

    More.YU on #

    <pre lang="cpp" line="1">
    HI,VIMER,最近又在弄VIM,看了你的VIM打造IDE系列,大部分功能都做出來了,不過現在有個缺陷,
    就是“自動補全功能”沒全部弄好。
    我現在可以自動提示當前文檔中定義過的字符串或者函數,但是我想加上更多的自動提示,
    例如ASCII C中的東西,就比如我鍵入prin時,能夠提示出printf這樣的功能,我用ctags在VC的include
    目錄下生成了tags文件,拷貝到了vimfiles下的tags目錄,并且在vim配置文件中添加了這段:
    set tags+=D:\Program\Vim\tags\c_tag,但依然無法提示。

    另外,我將WDK的頭文件也生成了tags文件(28M貌似有點太大),同樣的,加了這個配置:set tags+=D:\Program\Vim\tags\wdktags,比如我鍵入Rtl時,必須按Ctrl+P,才會提示所有包含這個關鍵字的函數,卻不能自動提示。但同時也表明了我某些地方已經配置對了是嗎?
    我按照你配置的F12快捷鍵生成,貌似生成的是當前文檔的tags文件么?那么這樣的話,豈不是每寫一會就要按F12生成一下么?而且,直接在項目的目錄下生成這玩意兒,豈不是在源文件中多了幾個對非VIM用戶來說毫無用處的文件么,可否將這些文件歸類呢?

    問題有點多,麻煩VIMER了。。

    </pre>

    Reply

    1. Dante

      Dante on #

      先說一下F12的問題,vim生成tags一般是為那些常用不變的庫來用的。。如果想要實時生成,可以做一個定時器,cronttab就可以解決。

      對于補全這里,看一下這篇文章:
      http://www.vnchuangji.cn/?p=768

      Reply

  30. noark9

    noark9 on #

    你好,請教個問題
    公司用的是pro*c的程序,擴展名是pc文件,使用下面方法將pc文件映射為了esqlc類型的文件
    autocmd BufEnter *.pc set filetype=esqlc
    我修改了taglist.vim和生成tags的配置,確實可以生成配置和taglist了,但是在使用自動補全插件的時候,如果無法找到成員,根據網上搜到的結果,增加了下面這一句
    autocmd FileType esqlc set omnifunc=ccomplete#Complete
    但是似乎還是沒有效果
    但是.c文件可以正常識別和查找到結構體成員

    Reply

    1. noark9

      noark9 on #

      補充一點,再試了下,發現使用映射的F12第一次生成tags文件后,可以正確找到結構體的成員,但是關了vi再開,就找不到了

      Reply

      1. Dante

        Dante on #

        pro*c補全沒有研究過,我覺得你還不如就直接 setf c 簡單些。

        關了vi再開找不到,你確定是在統一目錄打開的文件嗎?或者手工設置:
        set tags+=xxx/tags

        Reply

        1. noark9

          noark9 on #

          設置過tags了,似乎用可以把所有的符號搜索出來,就失敗了
          設置為c類型確實補全什么的都有了,但是有的關鍵字是esqlc里面有的,這樣語法著色就沒了
          額,雖然想過改c的語法著色的文件,但是,覺得這種不是比較完美的解決方法

          Reply

  31. lworld

    lworld on #

    關于autochdir和pwd的問題:
    當直接點擊位于e:\\homework\\hell\test.cpp用Vim打開時,用pwd命令顯示的是目錄e:\\homework\\hell\,沒有問題。但是。。當我直接點擊快速啟動欄運行vim,輸入:e e:\\homework\hell\test.cpp后在接著輸入pwd檢查當前工作目錄是竟然現實的只是E:\\,
    (_vimrc中已經有set autochdir,filetype indent plugin on等設置),實在搞不清楚,如果有時間的話,希望博主可以幫忙,謝謝

    Reply

  32. lworld

    lworld on #

    啊,終于解決了!!!原來需要把”e:\\"改成"e:\",Vim才 會認為該文件是從文件管理器啟動,并把當前目錄(可用
    :lcd 命令查看)切換到文件所在目錄

    Reply

    1. Dante

      Dante on #

      解決了就好呀~
      其實可以嘗試一下用/,即使在windows下,vim也會認為可用的~~

      Reply

  33. 松暮囧

    松暮囧 on #

    關于自動補全的,tags文件在哪里生成?寫完類之后生成嗎,我生成了,但是還是找不到模式。

    Reply

    1. Dante

      Dante on #

      一般是生成在當前目錄。你看一下是否有tags文件。

      Reply

      1. 松暮囧

        松暮囧 on #

        謝謝,已經解決了

        Reply

  34. zl

    zl on #

    你好,我想實現LUA語言的自動補全功能
    請問能用你說的方法實現嗎?
    又能生成LUA語言tags的工具嗎?
    僅僅做代碼補全的話,Cscope還是必須的嗎?
    望解答下,多謝!!

    Reply

  35. testory

    testory on #

    LZ問下,那個omnicppcomplete安裝是怎么裝的額,哪些文件放在哪些目錄下,木有看太明白的說。。

    Reply

  36. fcb

    fcb on #

    博主,你好。你的文中寫到“然后需要生成tags,哈哈,記得我們之前用F12映射的命令吧(把Vim打造成真正的IDE(2))”。可是我的(把Vim打造成真正的IED2)中并沒有看到介紹F12映射的命令。所以請問如何生成tags

    Reply

    1. Dante

      Dante on #

      嗯?就是這一段呀:
      首先確認安裝了ctags和cscope,并且確認這兩個可執行程序所在的目錄已經放進環境變量里面。(必須做,否則后邊都無法操作)
      在vimrc中配置如下:

      Reply

      1. fcb

        fcb on #

        哦,看到了,謝謝!

        Reply

  37. jy

    jy on #

    hi,關于a.vim的跳轉,博主有沒有遇到過這種情況:
    src/A.cpp
    inc/A.h
    -------這樣OK,但是
    src/dir/A.cpp
    inc/dir/A.h
    多了一層(或者若干層)目錄,這樣就切不過去了(表現為跳轉到一個空文件)

    Reply

    1. Dante

      Dante on #

      嗯,多了一層之后確實就不行了。
      這個恐怕只能通過改代碼解決了。

      Reply

  38. Likecer

    Likecer on #

    請問是在omni的那些*.vim里面嗎?

    Reply

    1. Likecer

      Likecer on #

      說錯了~應該是:
      請問是在omni的那些*.vim里面嗎?
      homepath是指的用戶文件夾吧,還是VIm安裝目錄?

      Reply

      1. Dante

        Dante on #

        呃,我不太明白你的意思。。
        你說$HOME 嗎?

        Reply

        1. Likecer

          Likecer on #

          《F12》這個發不上去……
          請問是在omni的那些*.vim文件里面《F12》生成Tags嗎?
          還有就是%HOMEPATH%是指用戶文件夾吧
          謝謝了

          Reply

          1. Dante

            Dante on #

            tags是為源代碼文件生成哈,比如cpp文件
            至于homepath我有用到這個變量嗎?

            Reply

            1. Likecer

              Likecer on #

              但是請問,我安裝了ctags,設置好了path環境變量指向exe,cspose也是,但是在*.vim里面,《F12》一下木有反應呢?

              Reply

              1. Dante

                Dante on #

                呃,當前目錄下得有源碼文件才行。。

                Reply

  39. nony

    nony on #

    你好,多項目引用時,我在tags文件中已經看到了其他項目的函數,可是在我自己的項目中卻沒有辦法自動補全該函數。
    請求幫助,謝謝

    Reply

    1. Dante

      Dante on #

      嗯?如果命令和我寫的一樣的話,那就不知道是啥問題了。。并沒有深入研究過tags的格式。。

      Reply

  40. 小楊

    小楊 on #

    一個類,兩文件,一頭一實現,怎么跳到實現文件里包含的其他頭呢...?!

    Reply

    1. Dante

      Dante on #

      :ts 可以選擇

      Reply

      1. 小楊

        小楊 on #

        可選擇的都是當前目錄及子目錄下的匹配的文件列表.
        如果是系統下的頭就跳不過去了...像/usr/local/include下的...TnT

        Reply

  41. 希爾博

    希爾博 on #

    博主說的omnicppcomplete插件智能用快捷鍵來激發補全嗎? 不能用“. -&gt; ::" 來自動機發麻?我按裝了,您的關于IDE的三篇文章都看遍了,但是自動提示始終激發不了。

    Reply

  42. 小楊

    小楊 on #

    set completeopt=menu
    設置了后當寫"free("還是會用/usr/include/stdlib.h
    的Preview, 因為使用了cscope + ctags...
    網上查了下, set completeopt=menu
    set completeopt-=preview后, 就不會有系統的聲明preview, 但按下F12, 生在tags和cscope文件后, 仍會有preview....
    是不是cscope+ctags生成時搜索了呢?

    Reply

    1. Dante

      Dante on #

      理論上是這樣的,你看一下completeopt是否成功設置了

      Reply

  43. hyy

    hyy on #

    首先,謝謝vimer的分享,從你這學了很多!然后問個問題!!那個照上面方法配置好之后,按的時候,整個vim界面會白一下,是為什么?而且在退出那個白一下的界面之后,在那些沒有代碼的地方還是白的!要光標移上去才會變成原來的顏色!

    Reply

  44. hyy

    hyy on #

    首先,謝謝vimer的分享,從你這學了很多!然后問個問題!!那個照上面方法配置好之后,按F12的時候,整個vim界面會白一下,是為什么?而且在退出那個白一下的界面之后,在那些沒有代碼的地方還是白的!要光標移上去才會變成原來的顏色

    Reply

    1. Dante

      Dante on #

      ctrl-l,你是遠程ssh的吧。

      Reply

      1. hyy

        hyy on #

        不是,是在linux下的終端,謝謝回復,問題已解決

        Reply

  45. findingsea

    findingsea on #

    按ctrl+x ctrl+o 始終都是找不到模式,tags文件已經生成了

    Reply

  46. fouvy

    fouvy on #

    "對NERD_commenter的設置
    let NERDShutUp=1
    這個命令在2009年的時候就被移除了。暈。

    Reply

  47. xinc_whu

    xinc_whu on #

    樓主請問下我的omnicppcomplete配置好后總c-x會出現“--X model ******”,再c-o就會“智能補全,找不到模式”
    我的tags文件是好的,這個是咋回事呢 求教

    Reply

  48. AlsoTang

    AlsoTang on #

    提醒一下博主:NERDShutUp選項已經在新版本中被去掉了,所以就不必設置它了。

    Reply

  49. 求教

    求教 on #

    a.vim
    好像有問題,
    比如我的頭文件在 xxx/ 下
    源文件在xxx/src/下
    我這樣設定path
    set path+=., ./src, ../
    同時也設了set autochdir
    但是還是不能正確在頭文件和源文件之間跳轉

    Reply

    1. 求教

      求教 on #

      弄錯了
      let g:alternateSearchPath = 'sfr:./src,sfr:../,sfr:../include,sfr:../src'

      Reply

  50. liusong

    liusong on #

    初學vim,請教一個問題:我的taglist窗口不顯示任何函數名,但是相應的tag是有這些函數標簽的,不知道這可能是哪里的問題,怎么樣修改

    Reply

  51. Patrick He

    Patrick He on #

    這篇文章中有兩張圖片已經 not found 了

    Reply

  52. Wizmann

    Wizmann on #

    圖掛了~麻煩了~1024~

    Reply

  53. xiao

    xiao on #

    博主 你這個網站布置的很好啊 是自己寫的還是的現成的模板 能不能推薦一下啊 畢業設計要用

    Reply

    1. 朱念洋

      朱念洋 on #

      現成的模板:zanblog

      Reply

  54. huixinming

    huixinming on #

    你好,我也遇到同樣的問題了,想問下你是怎么解決的,謝謝哈~

    Reply

發表評論