VIM + Ctags + omnicppcomplete - PullRequest
       56

VIM + Ctags + omnicppcomplete

2 голосов
/ 04 августа 2011

Я новичок в 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 ]

2 голосов
/ 04 августа 2011

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

Ни 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>
0 голосов
/ 04 августа 2011

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

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

0 голосов
/ 04 августа 2011

Omni :

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

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>
...