2011-08-03 39 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。