LINUX.ORG.RU

Помогите разобраться с поведением youcompleteme

 , ,


0

2

Есть 2 файла:

headers.h

struct Point {
  int x,y;
};

struct Line {
  struct Point start,end;
};

void printLine(struct Line*);
source.c
#include "headers.h"

int
main()
{
  struct Line l;

  return 0;
}

https://i.imgsafe.org/a052d90.png

На картинке видно, что l при нажатии . дополняется вариантами. Но при вводе print программа не делает попыток дополнить до printLine. Так и задумано, есть ли какие-то параметры, чтобы всё-таки дополнялось?

Второй вопрос — на рисунке видно, что при нажатии . выводится всплывающий список под курсором с вариантами дополнения, а сверху появляется минибуфер, в котором фигурирует дополнительная информация о дополняемом объекте и остаётся на экране после того как дополнение завершено. Как можно его закрыть или какие есть настройки для поведения программы в данном случае?

Ответ на: комментарий от kep

Чего ты всюду этот neovim проталкиваешь? Он уже научился в сервернейм, чтобы ему скармливать файлы прямо из файломанагера?

// Как с тобой можно связаться мимо ЛОРа?

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

Что значит проталкиваю, deoplete на виме не работает, например, а вторую часть предложения про сервернейм я просто не понял, потому что не знаю, что это такое и зачем.

Никак, увы, не использую мессенджеры, соцсети и т.п.

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

Странное дело. Поставил deoplete, neoinclude. printLine дополняется, а l при нажатии . нет. А ещё почему-то syntastic не работает, хотя работал, когда я в neovim просто указывал папку вима с плагинами.

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

а l при нажатии . нет.

у меня дополняется (end), но только при вводе 'l.en', может наверное и раньше, но у меня auto_completion_start_length = 3 стоит, а у тебя просто недонастроенно, скорее всего.

kep ()

Семантическое дополнение по ctrl + space работает.

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

syntastic не работает

Всё очень просто, нужно выбросить это тормозное говно (syntastic) на помойку и использовать neomake

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

Да, при введении en после точки предлагает дополнить, но вот неприятный момент образовался, когда я после точки набрал st, подразумевая start, а мне кроме start предложила программа дополнить ещё и вариантом struct, не совсем понятно зачем.

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

ну да, обрати внимание, там есть примечание [B]  — это буферное дополнение, т.е. простое, вдруг пригодится, кто знает, а [T]  — это тэговое, получается таким он видит его из neoinclude, или что.

Так что всё правильно, это нормально, если не нужно буферное дополнение (т.е. всё дополнять, что было уже в текущем буфере, а ведь struct был только что), то возможно его можно отключить совсем.

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

Что значит проталкиваю

Это значит, что ты в треде про вим(!) проталкиваешь другую софтину.

про сервернейм я просто не понял

Есть в виме такая фича.

vim --remote /etc/fstab
Откроет файл в уже имеющемся инстансе. Это очень удобно, особенно, когда для вима есть свой терминал с особыми для него настройками.

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

фигасе, не знал такое, ну в общем тут выше уже предложили вариант.

в треде про вим(!) проталкиваешь другую софтину.

через год-полтора не останется никакого вима, так мне бог открыл, так вижу.

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

не знал такое

А я не представляю, как можно без этого. Особенно, когда надо файл в проект добавить прямо при создании, не в notepad.exeleafpad же открывать.

выше уже предложили вариант

Потыкаю.

через год-полтора не останется никакого вима

Он ещё нас переживёт.

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

Потому что рефакторинг и UNIX-way.
Лично я не пользуюсь vim remote, и в близжайшее время не собираюсь. Смысл оно будет каждый раз подгружаться в память, слушать сокеты, etc?
Всё правильно делают

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

Всё очень просто, нужно выбросить это тормозное говно (YCM) на помойку и использовать neovim + deoplete + neoinclude, например.

Спасибо, наконец-то переехал на neovim, а то всё руки не доходили.

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

Классический Vim был написан в 1991 году и с тех пор он стал очень стабильным и безбажным.

Неизвестно, что наворотили разработчики в neovim в процессе коврового рефакторинга. Все-таки текстовый редактор - самое главное приложение ОС после эмулятора терминала и шэлла. Он должен быть каменно стабильным.

Вот вы с какими глюками классического Vim сталкивались, например? Если плагины не брать в расчет.

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

Не запоминал, но сталкивался не раз и каждый раз помогало скомпилить свежий app-editors/vim-9999, в основном это были креши при определенных условиях и сообщения об ошибках, которых быть не должно было.

kep ()

По поводу первого пункта Vovanano уже корректно ответил.
Такое поведение ycm - «by design».
Разработчики мотивирует тем, что если они будут автокомплитить «as you type», то будет работать достаточно медленно в случае быстрой печати.
Строго говоря, способ решить эту проблему существует (гуглим по слову ycm_collect_identifiers_from_tags_files), но обещают проблемы с потреблением памяти и снижением скорости работы в случае больших объемом кода.

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

Да, я загуглил, что ж если так задумано и так правильнее, то хорошо. ctrl+space вполне достаточно. Спасибо. Отметил как решённую.

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

Если можно я прямо тут ещё один вопрос задам, чтобы не создавать ещё тему. Буфер с вариантами дополнения закрывается только при переходе в командный режим, также с проверкой syntastic после исправления ошибки. Есть ли какие-то параметры, чтобы эти действия выполнялись в режиме ввода или это тоже принесёт лишние расходы?

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

через год-полтора не останется никакого вима

Очень сомневаюсь.

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

Я плохо изъяснился. Мне помог ваш ответ. Действительно окно с превью закрывается после дополнения, но только после перехода в командный режим. Если, скажем, просто продолжить ввод, то окно останется на своём месте.

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

А вы пробовали использовать ту строку, которую я написал в этом комментарии?
Поскольку первый комментарий решает вопрос с закрытием превью после перехода в командный режим,
а второй - как раз закрывает превью сразу после дополнения без необходимости выходить из режима редактирования.
По крайней мере, у меня так.

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

На всякий случай приведу коротенький скринкаст.
Обратите внимание, что при дополнении я не выхожу из режима редактирования вообще.

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

Действительно, я был невнимателен и не заметил отличия в строке. Большое спасибо за помощь и терпение. Вы помогли мне устранить досадные мелочи в работе с vim.

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