• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            馭風(fēng)萬里無垠

            VIM下實(shí)現(xiàn)對(duì)C++ STL的IntelliSense

            以前嘗試過在vim下配置STL的Intellisense曾經(jīng)沒有成功;最近有空剛好仔細(xì)看了下vim的一些相對(duì)高級(jí)的manual,

            總算將OmniCppComplete主頁上的效果給弄了出來(這里)。

            根據(jù)其help提示一步一步來(裝完了omnicppcomplete之后,可以:help omnicppcomplete):

            • 首先需要有ctags,并且必須是Exuberant ctags,我的Ubuntu上已經(jīng)是最新版了:

            • skyscribe@skyscribe:~/study/vim/pics$ ctags --version
              
              Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
              
                Compiled: Aug  6 2009, 17:06:22
              
                Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
              
                Optional compiled features: +wildcards, +regex
              
            • 在 ~/.vimrc 里邊加入autoload taglist功能,為了方便自動(dòng)更新當(dāng)前tags,設(shè)置一個(gè)快捷鍵(這里):

            map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
            
            source ~/.vim/my.vim
            

             

            這里的自動(dòng)加載已有vim的功能,就用一個(gè)vim腳步來實(shí)現(xiàn) (參考 vim :help glob給的例子):

            cat ~/.vim/my.vim 
            
            let tagfiles = glob("`find ~/.vim/tagfiles -name tags -print`")
            
            let &tags = substitute(tagfiles, "\n", ",", "g")
            

             

            以后需要新的taglist,只需要放在~/.vim/tagfiles目錄下就好了。

            vim啟動(dòng)的時(shí)候,會(huì)自動(dòng)執(zhí)行~/.vimrc,從而調(diào)用my.vim,將事先準(zhǔn)備好的taglist更新進(jìn)去;這里一般放一些不太變化的靜態(tài)頭文件tag就可以了。

            • 要有STL的intelliSense,自然要有STL C++的tags database了,這里需要生成之。

            根據(jù)上一步的慣例,需要生成一個(gè)tags文件,放在~/.vim/tagfiles/的某個(gè)子目錄下:

            mkdir -p ~/.vim/tagfiles/gcc<ver>/
            
            ls –l /usr/include/c++/

             

            這里需要將ver換成當(dāng)前系統(tǒng)的libstdc++版本,Ubuntu 9.10上的是4.4.1.

            • 用上邊的命令生成對(duì)應(yīng)的tags文件:

            ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . -o ~/.vim/tagfiles/gcc4.4/tags /usr/include/c++/4.4

            寫一個(gè)簡單的c++程序,在Insert Mode下,Ctrl+X, Ctrl+P,發(fā)現(xiàn)并不能工作,什么提示也沒有;初步懷疑是對(duì)應(yīng)的tag文件不對(duì)。

            幸好早有人嘗試過了,給出了一種辦法(還是這里),可惜他的方法我試了不行,不過已經(jīng)可以借用他的思路了:

              • 將/usr/include/c++/4.4.1/的內(nèi)容全部拷貝到一個(gè)目錄下:
              • mkdir gcc4.4
                cp -R /usr/include/c++/4.4 ./
              • 寫一個(gè)腳步替換所有的NAMESPACE宏定義(這里用sed完成宏替換,為了避免過于晦澀,還是放在一個(gè)臨時(shí)的腳步文件里邊來,便于調(diào)試吧):
            cat generate_sed.sh 
            
            #!/bin/bash
            
            if [ $# -eq 0 ];then
            
                dir=.
            
            else
            
                dir=$1
            
            fi
            
            #Substitute scripts
            
            cat > .edit.sed <<- EOF
            
            s/\b_GLIBCXX_BEGIN_NAMESPACE\b\s*\(\s*(\w+)\s*\)/namespace \1{/g
            
            s/_GLIBCXX_BEGIN_NESTED_NAMESPACE\s*\(\s*std\s*,\s*_GLIBCXX_STD_[DP]\s*\)/namespace std{/g
            
            s/\b_GLIBCXX_END_NAMESPACE\b/}/g
            
            s/\b_GLIBCXX_END_(NESTED_\?NAMESPACE\b/}/g
            
            EOF
            
            count=0
            
            cols=`tput cols`
            
            cols=`echo "$cols - 8"|bc`
            
            for file in `find $dir -type f`;do
            
                if [ "T"$file != "T"$0 ];then
            
                    sed -nf ".edit.sed" $file
            
                    count=`echo "$count+1"|bc`
            
                    echo -ne "="
            
                    if [ `echo "$count%$cols"|bc` -eq 0 ];then
            
                        echo " $count"
            
                    fi
            
                fi
            
            done
            
            echo "Processed $count files!"
            
            rm -fr .edit.sed
            
            # Generate ctag file
            
            ctags -R --c++-kinds=+p --fields=+iaS --extra=+q 
            
            echo "generated tag file!"
            
              • 再生成tag:
            skyscribe@skyscribe:~/libstdc++/gcc4.4$ ./generate_sed.sh . 
            
            ==================================================================================================== 100
            
            ==================================================================================================== 200
            
            ==================================================================================================== 300
            
            ==================================================================================================== 400
            
            ==================================================================================================== 500
            
            ==================================================================================================== 600
            
            ===============================================================Processed 663 files!
            
            generated tag file!
            
            ls tags -lh
            

            -rw-r--r-- 1 skyscribe skyscribe 4.2M 2010-01-10 18:21 tags

            cp tags ~/.vim/tagfiles/gcc4.4/

             

            • 到這里效果終于出來了:

            上邊的review窗口顯示當(dāng)前調(diào)用的函數(shù)信息,輸入./->/:: 的時(shí)候會(huì)自動(dòng)提示,也可以用CTRL+X CTRL+O 來調(diào)出提示窗口,方向鍵則可以選擇。

            omni_comp

            vec_insert

            vec_insert_sel

             

             

             
             
             
             
             

            posted on 2010-01-10 18:28 skyscribe 閱讀(2358) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2010年1月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久强奷乱码老熟女| 九九久久自然熟的香蕉图片| 久久99精品久久久久久水蜜桃| 伊人热人久久中文字幕| 欧美日韩成人精品久久久免费看| 三级韩国一区久久二区综合 | 久久久久免费视频| 成人综合久久精品色婷婷| 奇米综合四色77777久久| 国产亚州精品女人久久久久久| 伊人伊成久久人综合网777| 久久天天躁狠狠躁夜夜avapp | 思思久久99热只有频精品66| 久久国产精品99精品国产| 亚洲AV伊人久久青青草原| 亚洲嫩草影院久久精品| 蜜臀久久99精品久久久久久小说 | 久久久久亚洲精品无码蜜桃| 狠狠色伊人久久精品综合网| 久久经典免费视频| 青青草国产97免久久费观看| 69久久夜色精品国产69| 国产欧美久久久精品影院| 精品久久综合1区2区3区激情| 日产精品久久久久久久性色| 三级片免费观看久久| 国产精品热久久毛片| 久久久久久午夜成人影院| 久久久久久久91精品免费观看| 精品国产综合区久久久久久| 久久精品国产亚洲av日韩| 亚洲综合伊人久久大杳蕉| 一本综合久久国产二区| 手机看片久久高清国产日韩| 88久久精品无码一区二区毛片 | 久久综合视频网站| 久久久久黑人强伦姧人妻 | 午夜精品久久久久久中宇| 久久精品国产亚洲AV香蕉| 一级做a爰片久久毛片看看| 香蕉久久夜色精品国产2020|