VIM + CTAGS + omnicppcomplete

时间:2011-08-03 22:24:44

标签: c++ c vim ctags omnicppcomplete

我是linux新手,但我最后决定尝试一下,我最近安装了openSUSE。在Windows 7上,我使用Visual Studio进行c / c ++编程。我试图在linux下找到任何IDE,试过KDevelop但不喜欢它,所以我决定尝试将VIM设置为我的源代码编辑器。

首先,我需要找到一些自动完成功能。我读了一些关于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 ++ - types = + p --fields = + iaS --extra = + q。)但是没有生成这样的文件。我做错了什么?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

<强>全

有人见过或提到过这个吗?

https://llvm.org/svn/llvm-project/llvm/trunk/utils/vim/vimrc

<强>代码

从臀部开始拍摄(阅读:未经测试且未经验证)尝试将CD播放到当前目录。

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

答案 2 :(得分:0)

好的,谢谢你的所有答案,我发现了问题的根源所在。当我从终端F8运行VIM工作正常,当我输入!pwd它显示我的.c文件所在的目录(例如〜/ prog / C),但当我使用GvIM并打开相同的.c文件并输入!pwd显示〜/ dokumenty,所以我认为问题出在VIM / GVIM的某个地方。我想知道为什么GVIM不会识别文件夹,无论我打开什么文件?

--- ---编辑 我添加了set autochdir到我的.vimrc,现在一切正常,问题解决了,但如果有人能回答我,为什么一切都在我从终端运行VIM时工作(即使autochdir被关闭)我会很感激但是它没有为GVIM工作。