LINUX.ORG.RU

vim youcompleteme траблы

 , , , ,


1

3

Надо писать на Си через ssh. Планируется использовать vim+tmux, хотелось бы организовать человеческий автокомплит. Поставил пакет vim-youcompleteme, итого автокомплит на ctrl+n в insert моде появился. Окей. Но есть траблы. В коде есть include <curl/curl.h>, youcompleteme оттуда ничего не видит. И второстепенное - хотелось бы, чтобы варианты автокомплита появлялись сразу, как только введен символ, а не только при нажатии ctrl+n. Принимаются также предложения перейти на emacs, если там есть вариант реализации нормального автокомплита, поставить другой плагин для автокомплита на vim (более предпочтительно). В принципе, можно жить и без автокомплита вообще, но с ним сильно удобнее будет, особенно, когда добавил новую библиотеку, которую ранее не использовал.

Вроде надо еще сделать vam install youcompleteme и все само будет работать без ctrl+n. Для curl/curl.h надо поправить ycm_extra_conf.py.

rymis ★★ ()

Надо писать на Си через ssh

Зачем?

В коде есть include <curl/curl.h> youcompleteme оттуда ничего не видит.

А где находится curl.h? Он вообще есть в системе? Может быть стоит прописать пути в конфигурационный файл этому youcompleteme?

SZT ★★★★★ ()

автокомплит на ctrl+n в insert моде появился

Звучит, как будто youcompleteme не работает. Ctrl-n — это стандартный вимовский «комплит индентификатора».

Если у тебя нет подобного: https://ibb.co/ibMGEF, то ycm не работает. FYI: ycm не предлагает дополнять имена функций из внешних файлов без «пинка»: C-Space.

В любом случае, имеет смысл глянуть в /tmp/ycmd_*log на предмет «что-то не работает». В твоем случае, скорее всего, будет ругань на «не знаю флагов компиляции».

В коде есть include <curl/curl.h>, youcompleteme оттуда ничего не видит

В корневой директории проекта, откуда запускаешь vim, создай .ycm_extra_conf.py, куда положи нужные флаги:

def FlagsForFile(filename, **kwargs):
    return {
        'flags': ['-xc', '-std=c99', '-I/usr/include/libxml2'], # libxml здесь для примера — для libcurl никаких дополнительных флагов не требуется
        'do_cache': True
    }

Принимаются также предложения перейти на emacs, если там есть вариант реализации нормального автокомплита

Там все почти то же самое. ycm настроить проще, чем emacs-овский auto-complete + clang-based источник комплита.

kawaii_neko ★★★★ ()
Ответ на: комментарий от kawaii_neko

В корневой директории проекта, откуда запускаешь vim, создай .ycm_extra_conf.py, куда положи нужные флаги:

А есть какой-нибудь удобный способ получения списка флагов? Или только копипастить из вывода сборки?

O02eg ★★★★★ ()
Ответ на: комментарий от kawaii_neko

Есть дополнение абсолютно всех функций time.h, string.h, stdio.h, stdlib.h, wchar.h, string.h, math.h, короче всех стандартных библиотек, но не curl.h

nikitosios20031 ()
Ответ на: комментарий от SZT

Надо писать на Си через ssh

Зачем?

Знаешь анекдот про проктолога и выхлопную трубу?

Siado ★★★★★ ()
Ответ на: комментарий от nikitosios20031

Есть вероятность, что мне придется уехать из дома раньше, я не успею выполнить заказ, надо будет дописывать код через ssh.

Use git luke!

Siado ★★★★★ ()

Выброси свой Vim на помойку :-) Возьми IDE (например, CLion - платный и проприетарный, да) и будь счастлив :-) Удалённая отладка из коробки, дополнения и переходы и прочие радости жизни :-) Лол :-)

Конечно, если ты фанат вима, то тебе проще возмутиться, чем освоить реально мощный инструмент :-) Но ты попробуй заставить себя не кривляться и без фанатизма поработать в современной IDE :-) Потом никакими уже на вимы будешь смотреть как на редактор текстов, а не на супер-пупер инструмент с дополнениями :-) Лол :-)

anonymous ()
Ответ на: комментарий от anonymous

Потом никакими уже на вимы

Т.е. после IDE никакими коврижками на вимы не заманишь :-) Лол :-)

anonymous ()
Ответ на: комментарий от anonymous

:-) Лол :-) Возьми IDE :-) Лол :-) супер-пупер :-) Лол :-) реально мощный инструмент :-) Лол :-) дополнения и переходы :-) Лол :-) редактор текстов :-) Лол :-)

Siado ★★★★★ ()

Последний раз, когда писал на C++, использовал rtags, работали автодополнение и переход к определению и использованию по всему проекту и зависимостям, больше мне не было нужно. Для C тоже должно работать.

Laz ★★★★★ ()
Ответ на: комментарий от kawaii_neko

FYI: ycm не предлагает дополнять имена функций из внешних файлов без «пинка»: C-Space.

У меня предлагает без всяких пинков. Просто в .ycm_extra_conf.py прописаны нужные параметры и пути.

Можно ваш .ycm_extra_conf.py? У меня какой-то очень старый, который я тягаю из проекта в проект и изменяю только пути и дефайны.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Можно ваш .ycm_extra_conf.py?

Так он же от проекта к проекту различается. Я генератором пользуюсь по большей части, не будь его, точно так же изменял бы пути и дефайны из проекта в проект.

kawaii_neko ★★★★ ()
Ответ на: комментарий от kawaii_neko

Так он же от проекта к проекту различается.

Но отличается от только набором путей и дефайнов. Я посмотрел на результат генератора - файл отличается от того, что использую я.

andreyu ★★★★★ ()

Всё очень просто

Потому что YCM - говнище, и автор его мудак. Нужно выкинуть гавёху и использовать Neovim.

HeipaVai1o ()
Ответ на: комментарий от andreyu

Я посмотрел на результат генератора - файл отличается от того, что использую я.

А, это рукописный файл, которые я лепил прежде чем нашел генератор. template.py можно существенно урезать, но особой необходимости в этом нет.

В ycm-generator-е мне не понравилось только выставление всему проекту -x$LANG флага, и я добавил пару костылей без вырезания лишних фрагментов: https://pastebin.com/6ghmKTyx

kawaii_neko ★★★★ ()
Ответ на: Всё очень просто от HeipaVai1o

Потому что YCM - говнище, и автор его мудак

А есть что-то лучше?

Нужно выкинуть гавёху и использовать Neovim

После vim8 с асинхронностью, как я понимаю, уже все равно

kawaii_neko ★★★★ ()
Ответ на: комментарий от kawaii_neko

А есть что-то лучше?

deoplete

После vim8 с асинхронностью, как я понимаю, уже все равно

После neovim уже всё равно, что там у vim с асинхронностью.

anonymous ()
Ответ на: комментарий от anonymous

После neovim уже всё равно, что там у vim с асинхронностью.

Дети Уганды с тобой не согласны.

kawaii_neko ★★★★ ()
Ответ на: комментарий от anonymous

После neovim уже всё равно, что там у vim с асинхронностью.

Боюсь я уже не осилю портировать конфиг vim'а для neovim. Да и часть плагинов наверное отвалится.

andreyu ★★★★★ ()
Ответ на: комментарий от anonymous

Он же совместим.

Так заявлено, но на практике не все так радужно. Сегодня я попробую еще раз, может на сей раз все заведется само.

Как лучше поступить, симлинк на .vim/ на .nvim/ или сделать локальную копию конфига?

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

У neovim нет встроенной поддержки python, он запускает внешний процесс и общается с ним через msgpack-rpc. Надо только для питона поставить neovim-клиент:

pip3 install neovim
anonymous ()
Ответ на: комментарий от anonymous

Youcompleteme понимает compile_commands.json

Вот только глянь, какие внутри костыли, что подставить флаги к заголовочным файлам.

kawaii_neko ★★★★ ()
Ответ на: комментарий от kawaii_neko

Там не только к заголовочным файлам. Ещё и какие-нибудь определения указываются.

O02eg ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.