Начал использовать (пробую) LSP

Что: 1ae39d6ffa08741a2564f3e095508ce49b11bf03

Когда: 2020-07-10 18:34:45+03:00

Темы: go python vim

Начал использовать (пробую) LSP

https://github.com/prabirshrestha/vim-lsp
http://git.stargrave.org/cgit.cgi/dotfiles.git/tree/vim/.vim/plugin/lsp.vim
Решил попробовать что же такое Language Server Protocol и будет ли от
него какой профит в Vim. Установить оказалось довольно просто: четыре
плагина на pure-Vim (+Lua опционально) которые можно просто в pack/
директорию склонировать с Github-а:

    mkdir -p ~/.vim/pack/lsp/start ; cd ~/.vim/pack/lsp/start
    git clone https://github.com/prabirshrestha/vim-lsp.git
    git clone https://github.com/prabirshrestha/asyncomplete.vim.git
    git clone https://github.com/prabirshrestha/asyncomplete-lsp.vim.git
    git clone https://github.com/mattn/vim-lsp-settings.git

asyncomplete асинхронно позволяет показывать кучу дополнений на основе
фунок, модулей, методов и прочего. asyncomplete-lsp нужен чтобы он
работал с vim-lsp. А vim-lsp-settings это просто автозапускалка LSP
серверов для соответствующих ЯП.

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

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

Для Python установил python-language-server: работает медленно, но хотя
бы явно кэширует результаты работы. То есть приходится ждать многие
действия. Но это всё асинхронно происходит, поэтому: раньше я просто не
видел доки/сигнатур, а теперь, пусть не мгновенно, но увижу. Плюс
какой-то lint делает и подсвечивает явно косячный синтаксис, который
прежде я бы только отдельно запуская отловил бы. Как минимум, это не
flake8/pylint запускаемые при сохранении изменённого файла и всё же
работает существенно быстрее хотя бы для проверки синтаксиса. В общем
удобство есть. Goto definition работает. Но медленно. Если нужно
прыгнуть куда-то что не покрыто ctags -- профит есть. В противном случае
ctags тупо моментальнее работают.

Для Go сделал go get golang.org/x/tools/gopls. И после открытия в Vim-е
.go файла, он автоматом запускает этого демона. Всё тоже работает,
приятно что хотя бы сразу проверяет синтаксис. Причём, все показы доки и
автодополнения выполняются буквально мгновенно. Я не замечаю тормозов
вообще. Goto definition тоже моментальный.

Для C, как оказалось, из коробки LLVM/Clang есть clangd. Как минимум,
опять же, приятно показывает сигнатуры и корявый синтаксис или например
то, что я возвращаю другой тип данных в функе, отличающийся от того что
я написал. Вот правда goto definition в половине случаев срабатывает, а
в половине нет. Лень с ходу разбираться с чем это связано, но он даже
импорт <PCSC/...> не находит из коробки. Но, опять же, не страшно,
профит всё равно есть. Однако на C (clangd) тормоза во многих местах всё
же имеются, иногда даже похуже чем у Python. Но возможно это связано с
проектом более большим.

В общем, установка проста, pure vimscript (а не этот, судя по Интернету,
популярный https://github.com/neoclide/coc.nvim который в README мне
сразу говорит чтобы я ставил NodeJS (да пошёл ты в жопу!)), профит от
быстрой real-time проверки синтаксиса и показа док/сигнатур имеется.
Пока я считаю что оно всё стоит того.

оставить комментарий

Сгенерирован: SGBlog 0.34.0