LINUX.ORG.RU

На сколько сложно писать плагины к vim?

 ,


1

2

В первую очередь интересуют языки и скорость работы. Я нашел, что можно писать на vimscript, python, scheme и lua. А также, что python раз в 20 быстрее vimscript, а luajit чуть ли не в 1000 (правда там не говорилось, в какой момент этот lua компилируется, но я почти уверен, что на старте vim'a). Про схему пока не искал, да и не очень хочется экспериментировать с малознакомым языком.

Во-вторых, интересуют подводные камни разработки плагинов под vim. Как я понимаю, функции должны быть очень быстрыми, чтобы интерфейс не подвисал. Поэтому я хочу вынести всю тяжелую работу в отдельный процесс, который взаимодействует с плагином через, например, shm. В плагине, соответственно, будет только чтение данных. Нет данных - нет автодополения, подсветки etc.

Теперь о самой задаче. Мне нужен редактор кода, который умеет работать с cmake-проектом. Из того, что я использовал, ближе всего к моему идеалу KDevelop, но уже давно хочется большего. Что-то близкое по функционалу, обычно имеет схожие проблемы, но не имеет шикарной подсветки и не менее шикарного частичного автодополнения по tab'у (+ многое еще и на Java).

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

Сейчас еще попытаюсь заставить qtcreator работать с существующим cmake-проектом. А пока поделитесь опытом написания плагинов к vim на lua и/или python.

★★

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

QtCreator для CMake-проектов пользуется генерированными проектными файлами для CodeBlocks. Если в генерированном файле будут указаны эти дефайны (не в курсе правда работает это или нет, можешь посмотреть .cbp файл в директории сборки), то и в QtCreator они появятся.

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

Угу, а потом я синкаю код, где поменяли cmake-файлы и мне нужно пересоздавать проект (о чем я, конечно, не хочу и не буду думать). Нужна нативная поддержка, как в KDevelop. И опять же, вопрос у меня о другом =)

kulti ★★
() автор топика

А так - вим с всеми нужными плагинами для разработки адово тормозит (ну или скажем так - «не обеспечивает нужной отзывчивости»), да и любые плагины для тегов далеки от идеала.
Но как редактор хорош, потому рекомендую посмотреть в сторону QtCreator и тамошнего FakeVim.

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

Угу, а потом я синкаю код, где поменяли cmake-файлы и мне нужно пересоздавать проект (о чем я, конечно, не хочу и не буду думать)

ПКМ на проекте -> Run CMake. Всё пересоздастся само одной кнопкой, если уж сильно напрягает можно попробовать как-нибудь завязать на синхронизацию из репов.

И опять же, вопрос у меня о другом =)

Ничего не поделаешь, это лор :)

btw, из того, что слышал краем уха - у вима какие-то проблемы с этим самым «вынести в отдельный процесс», из-за чего и не получилось реализовать дебаг прямо в окне редактора без патчей на сам вим.

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

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

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

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

Ок, какие на ваш взгляд плагины нужны? Мне нужна работа с cmake-проектами(такого плагина не нашел). cscope и clang_complete и правда не очень хороши, но я не очень спешу, так что можно на том же libclang самому запилить дополнялку, которая работает в фоне. Еще я minibufexplorer использую. Пока не искал, но мне еще нужен «quick open» (в qtcreator это называется Locator); тут тоже свое решение придется скорее всего пилить.

И еще раз, KDevelop для меня лучше qtcreator'a.

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

Спасибо, но эту и другие книги/статьи я уже нагуглил на почитать =)

Жаль, что просто на python'е нельзя, но там же наверно совсем чуть-чуть на VimL нужно будет написать? Что-то типа биндинга?

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

Run CMake

Ок, попробую.

у вима какие-то проблемы с этим самым «вынести в отдельный процесс»

Я готов отдельный процесс сам запускать, а vim будет просто читать данные из shm или БД. Неужели с этим могут быть проблемы?

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

но там же наверно совсем чуть-чуть на VimL нужно будет написать?

На 2000 строк питонячьего (херасе я уже плагинов накрапал) кода у меня 60 строк VimL. Пожалуй мелочь, да.

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

Неужели с этим могут быть проблемы?

Проблемы будут если нужно будет обновлять содержимое буфера при неблокирующей команде.

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

Можно поподробнее, я пока еще не читал умных книжек. Буфер - это vim'овский буфер обмена? И что за неблокирующие команды?

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

Буфер - это vim'овский буфер обмена?

Буфер — это кусок памяти, который содержит текст для редактирования/просмотра, может отображаться в окне.

И что за неблокирующие команды?

Например запуск тестов или сборка.

baverman ★★★
()
Последнее исправление: baverman (всего исправлений: 1)
Ответ на: комментарий от kulti

Пока не искал, но мне еще нужен «quick open» (в qtcreator это называется Locator); тут тоже свое решение придется скорее всего пилить.

Плагин CtrlP.

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