2011-08-03 58 views
2

我是linux新手,但我最終決定嘗試一個,我最近安裝了openSUSE。在Windows 7上,我使用Visual Studio進行c/C++編程。我試圖在linux下找到任何IDE,試過KDevelop但不喜歡它,所以我決定嘗試將VIM設置爲我的源代碼編輯器。VIM + ctags + omnicppcomplete

首先,我需要找到一些自動完成。我讀了一些關於GCCSense和clang_complete的內容,但是現在安裝這些東西對我來說有點複雜,所以我決定使用omnicpp和ctags。

我下載了omnicpp並把這些文件放到〜/ .vim文件夾中,我安裝了ctags。我的.vimrc看起來是這樣的:

set number 

" --- OmniCppComplete --- 
" -- required -- 
set nocp " non vi compatible mode 
filetype plugin on " enable plugins 

" -- optional -- 
" auto close options when exiting insert mode 
autocmd InsertLeave * if pumvisible() == 0|pclose|endif 
set completeopt=menu,menuone 

" -- configs -- 
let OmniCpp_MayCompleteDot = 1 " autocomplete with . 
let OmniCpp_MayCompleteArrow = 1 " autocomplete with -> 
let OmniCpp_MayCompleteScope = 1 " autocomplete with :: 
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert) 
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files 
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype (i.e. parameters) in popup window 

" -- ctags -- 
" map F8 to generate ctags for current folder: 
map <F8> :!/usr/bin/ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 
" add current directory's generated tags file to available tags 

set tags=./tags,tags,/home/andrzej/vim/commontags 

所以嘗試一下我做了簡單的.c文件

struct str 
{ 
    int aaa; 
}; 

int main() 
{ 
    str *wsk; 
    wsk->aaa=5; 
    return 0; 
} 

我按F8鍵,當我在輸入模式不是,它應該產生的地方,當標籤文件.c文件位於(map:!/ usr/bin/ctags -R --C++ - kinds = + p --fields = + iaS --extra = + q。),但不會生成此類文件。我做錯了什麼?

+1

其實我覺得'clang_complete'是更簡單的方法,但它也提供了更好的結果。 – tungd

回答

2

編輯:

無論VIM也不GVIM默認情況下改變當前目錄爲您服務。因此,命令將在您的環境的當前工作目錄中執行。總之,如果你跑了:

cd/&& vi ~/prog/c/file.c 

你會有同樣的問題,你在gvim中使用vi。這就是爲什麼我在我的評論中展示的綁定中使用了絕對路徑。如果這是您期望的行爲,那麼使用autochdir是一個合理的解決方案。

原文:

這個問題似乎是+字符。我建議把你的ctags的爭論到~/.ctags

$ echo -e "--c++-kinds=+p\n--fields=+iaS\n--extras=+q" > ~/.ctags 
$ cat ~/.ctags 
--c++-kinds=+p 
--fields=+iaS 
--extra=+q 

然後改變你的映射:

map <F8> :!/usr/bin/ctags -R<CR> 

否則,您可以逃脫 '+' 字符:

map <F8> :!/usr/bin/ctags -R --c\+\+-kinds=\+p --fields=\+iaS --extra=\+q .<CR> 
+0

沒有任何改變,當我按下F8時沒有創建標籤文件,但是當我手動輸入此文件夾並使用ctags時,創建了標籤文件,也許這是一些VIM問題? – Andrew

+0

按F8鍵時發生了什麼?你確定你在正確的目錄嗎?老實說,我現在只在一個項目上工作,所以我只是使用'map :!ctags -f〜/ prj/tags -R〜/ prj ',這樣我就可以從任何地方運行它。 – bhinesley

+0

「F8」也可能與另一個vim綁定衝突,或者來自窗口管理器或終端的衝突。你可以使用'nmap ; c:!/ usr/bin/ctags -R '嘗試綁定到'; c'。 – bhinesley

0

好的,感謝您的答覆,我發現問題的根源在哪裏。當我從終端F8運行VIM的時候工作正常,當我輸入!pwd時,它顯示了我的.c文件所在的目錄(例如〜/ prog/C),但是當我使用GvIM時,我打開相同的.c文件並輸入!pwd顯示〜/ dokumenty,所以我認爲問題出在VIM/GVIM的某處。我想知道爲什麼GVIM無法識別文件夾,無論我打開哪個文件?

---編輯--- 我添加了set autochdir到我的.vimrc,現在一切正常,問題解決了,但我會很感激,如果有人能回答我,爲什麼當我運行VIM時一切正常從終端(即使autochdir被關閉),但它不適用於GVIM。