Vim по полной: Введение

от автора

Привет, хабраюзер!

Вот уже второй год я активный пользователь и поклонник редактора Vim. За это время я прошел путь от двух команд в .vimrc, до файла в несколько килобайт и обратно. Я испробовал очень много плагинов, а так же активно писал собственные, и теперь это мой основной текстовый редактор для работы и отдыха.

В этой серии статей я решил поделиться собственными наработками и, возможно, показать, на что может быть способен этот редактор в руках программиста. Серия будет состоять из следующих частей:

  1. Введение (vim_lib)
  2. Менеджер плагинов без фатальных недостатков (vim_lib, vim_plugmanager)
  3. Уровень проекта и файловая система (vim_prj, nerdtree)
  4. Snippets и шаблоны файлов (UltiSnips, vim_template)
  5. Компиляция и выполнение чего угодно (vim_start)
  6. Работа с Git (vim_git)
  7. Деплой (vim_deploy)
  8. Тестирование с помощью xUnit (vim_unittest)
  9. Библиотека, на которой все держится (vim_lib)
  10. Другие полезные пакеты

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

Что не так с плагинами для Vim

Основная проблема редактора (если не считать VimLanguage), это огромное количество разнообразных плагинов на все случаи жизни. Казалось бы, что в этом плохого? Дело в том, что плагины пишутся огромным сообществом, от чего они крайне плохо стыкуются между собой. Часто можно столкнуться с тем, что один из твоих плагинов частично умеет то же, что и два других, просто потому, что автор этого плагина решил добавить в него побольше «плюшек». Если заглянуть в код большинства плагинов, можно встретить множество дублирующихся от плагина к плагину решений и алгоритмов, которые по хорошему должны быть вынесены либо в VimLanguage, либо в некоторую единую библиотеку. К сожалению некоторые авторы плагинов пытаются реализовывать эти библиотеки, но после нескольких простеньких плагинов, созданных на базе этих библиотек, они прекращают поддержку и помимо десятка не слишком различающихся плагинов, вы должны установить парочку библиотек.

Когда я занялся разработкой под Vim, моей основной целью было написание единой библиотеки (да, еще один стандарт) для всех моих, а главное, чужих плагинов. Отличительной особенностью моей идеи от других было то, что я собирался реализовать все основные плагины на базе этой библиотеки, а если есть готовые решения, то привести их к стандартам библиотеки. Другими словами я хочу реализовать весь «джентльменский набор» плагинов, которые будут стыковаться друг с другом «из коробки» и использовать единую библиотеку.

Два года работы

Свое движение к «чистому и прекрасному» я начал с написания библиотеки. Переписывал ее я целых три раза, ибо мне нужно было хорошенько разобраться во всех тонкостях VimLanguage, его возможностях и ограничениях, а их, я вам скажу, там множество! В результате получилась библиотека vim_lib, которая меня полностью удовлетворяет.

Особенностью библиотеки является то, что она определяет структуру редактора в целом (как фреймворк), добавляя новый уровень действия скриптов — проектный. На деле, это позволяет вам настроить ваш редактор для конкретного проекта и даже установить плагины, которые будут работать только в этом проекте. Это особенно полезно, когда вы работаете с несколькими ЯП.

Вот вам небольшой пример. Предположим, мы работаем с web-проектом используя PHP и JavaScript, а в свободное время пишем книгу с помощью LaTeX. Что вам могу предложить я и Vim:

  • Все общие настройки выносятся в каталог ~/.vim/, после чего они будут доступны во всех проектах
  • Настройки для web-проекта мы положим в каталог webProject/.vim/, а для работы с книгой в bookProject/.vim/
  • Каждый раз, открывая окно редактора Vim, мы будем видеть
    список недавних проектов

    а перейдя в проект, он откроется в месте его последнего редактирования с восстановлением всех окон

  • Чтобы каждый раз не создавать файлы в чистого листа (на пример Unit-тесты, классы Mapper для бизнес-логики или главы книги), мы создадим
    готовые шаблоны файлов

    в каждом проекте (на пример для Unit-тестов webProject/.vim/templates/test/___Test.php)

  • Кто захочет постоянно набирать
    foreach(...)

    Пусть это сделает за нас Vim. Создадим несколько snippets на все случаи жизни

  • Для работы с LaTeX установим прямо в проект bookProject специфичные для LaTeX плагины
  • Но мы не одиноки, потому поделимся с нашими соратниками своими наработками с помощью Git, а для этого у нас есть
    удобный интерфейс прямо в Vim

  • Закончили очередную главу и хотите посмотреть на нее в pdf читалке? Не вопрос! Нажимайте F9 и книга будет скомпилирована и показана вам незамедлительно. Есть ли смысл упоменать о других скриптах, которые можно выполнить столь же просто?
  • Решили запустить тестирование конкретного класса? Не вопрос, и для этого найдется плагин
  • Пришло время слить изменения в продакшн? Нажимаем одну кнопку и они уже там

Опытные пользователи Vim скажут: «Пфф… Для всего этого есть куча готовых плагинов. Велосипед!» — но вы просто не знаете на что способны предлагаемые мной решения. Мало того, что они легко стыкуются друг с другом, так они еще и более функциональные по сравнению с аналогами среди плагинов Vim! В этом вы сможете убедится в следующих статьях цикла, просто наберитесь терпения.

Что если не терпится

Практически все свои плагины я сопровождаю подробной документацией, потому попробовать вы их можете уже сейчас. Вот перечень реализованных на сегодняшний день решений:

  • vim_lib — базовая библиотека, без которой у вас ничего работать не будет. Она так же определяет порядок загрузки редактора
  • vim_plugmanager — моя реализация пакетного менеджера для Vim без «фатальных недостатков». Особенностью этого решения является возможность установки плагина как в пользовательский каталог, так и в каталог проекта без необходимости изменять конфигурацию плагина
  • vim_prj — очень полезный плагин, позволяющий сохранять и восстанавливать состояние проекта при его открытии и закрытии
  • vim_start — плагин реализующий стартовое меню с возможностью быстрого перехода к недавним проектам
  • vim_git — очень мощный плагин для работы с Git прямо из Vim
  • vim_grep — поиск в проекте
  • vim_deploy — плагин для работы с любыми системами деплоя (за счет адаптеров к ним). На сегодня реализовано только два адаптера: shipit и gradle
  • vim_unittest — плагин для работы с любыми системами xUnit (за счет адаптеров к ним). На сегодня реализован только адаптер для phpunit
  • vim_template — очень полезный плагин, позволяющий гибко настраивать шаблоны для новых файлов
  • vim_write — автоматическое сохранение проекта
  • vim_winmanager — работа с окнами Vim

Для установки создайте каталог ~/.vim/bundle (можно использовать любое имя) и скопируйте туда vim_lib. После добавьте в ваш .vimrc следующую запись:

filetype off  set rtp=~/.vim/bundle/vim_lib call vim_lib#sys#Autoload#init('~/.vim', 'bundle') " Адрес до вашего ~/.vim/bundle  Plugin 'vim_lib' " Другие плагины  filetype indent plugin on 

В общем, все как всегда.

Пока все

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

Чего не хватает Vim

Никто ещё не голосовал. Воздержавшихся нет.

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

ссылка на оригинал статьи http://habrahabr.ru/post/259701/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *