VIM+ Ctags+omnicppcomplete

Я новичок в Linux, но я наконец решил попробовать один, я недавно установил openSUSE. На Windows 7 я использовал Visual Studio для программирования c/ C++. Я попытался найти любую IDE под Linux, попробовал 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 ответа

Редактировать:

Ни vim, ни gvim по умолчанию не изменяют для вас текущий каталог. Поэтому команды будут выполняться в текущем рабочем каталоге вашей среды. Короче, если вы побежали:

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

у вас будет та же "проблема" с vi, что и у вас в gvim. Вот почему я использовал абсолютные пути в привязке, которую я показал в своем комментарии. Использование 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>

Хорошо, спасибо за все ваши ответы, я нашел, где источник проблемы. Когда я запускаю VIM из терминала F8, работает нормально, когда я набираю! Pwd, он показывает каталог, в котором находится мой файл.c (например, ~/prog/C), но когда я использую GvIM, я открываю тот же файл.c и набираю!pwd показывает ~ / документы, так что я думаю проблема кроется где-то в VIM/GVIM. Интересно, почему GVIM не распознает папку, независимо от того, какой файл я открываю?

--- edit --- Я добавил set autochdir в мой.vimrc, и теперь все работает нормально, проблема решена, но я был бы признателен, если кто-то может мне ответить, почему все работает, когда я запускаю VIM из терминала (даже когда autochdir был выключен), но он не работал для GVIM.

Омни:

Кто-нибудь видел или ссылался на это?

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

Теги:

Выстрел из бедра (читай: непроверенный и непроверенный) Попробуйте CD'ing к текущему каталогу.

map <F8> :cd %:p:h <Bar> :!/usr/bin/ctags -R --c\+\+-kinds=\+p --fields=\+iaS --extra=\+q .<CR>
Другие вопросы по тегам