VIM+ctags+omnicppcomplete

VIM+ctags+omnicppcomplete

本文关键字:VIM+ctags+omnicppcomplete      更新时间:2023-10-16

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

首先,我需要找到一些自动完成。我读了一些关于GCCSense和clang_complete的东西,但现在安装这些东西对我来说有点复杂,所以我决定使用omnicpp和tags。

我下载了omnicpp并把这些文件放在~/目录下。vim文件夹中,我安装了标签。我的.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 .),但是没有生成这样的文件。我做错了什么?

Edit:

默认情况下,vim和gvim都不会为您更改当前目录。因此,命令将在环境的当前工作目录中执行。简而言之,如果您运行:

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

你在使用vi时会遇到与在gvim中相同的"问题"。这就是我在注释中展示的绑定中使用绝对路径的原因。使用autochdir是一个合理的解决方案,如果这是您所期望的行为。

原始:

问题似乎是+字符。我建议把你的标签参数放入~/.ctags:

$ echo -e "--c++-kinds=+pn--fields=+iaSn--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>

Omni:

有人看过或参考过这个吗?

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

标记:

从髋关节(读取:未经测试和未经验证)尝试CD' s到当前目录。

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

好的,谢谢你的回答,我找到问题的根源了。当我从终端F8运行VIM时工作正常,当我输入!pwd时,它显示我的。C文件所在的目录(例如~/prog/C),但是当我使用GvIM并打开相同的。C文件并键入!pwd时,它显示~/文档,所以我认为问题在于VIM/GvIM中的某个地方。我想知道为什么GVIM不识别文件夹,无论我打开什么文件?

——编辑我添加了设置autochdir到我的。vimrc,现在一切都很好,问题解决了,但我会很感激,如果有人能回答我,为什么一切都在工作,当我从终端运行VIM(即使当autochdir被关闭),但它不工作的GVIM。