Vim по повній менеджер плагінів без фатальних недоліків, savepearlharbor
- Введення (vim_lib)
- Менеджер плагінів без фатальних недоліків (vim_lib, vim_plugmanager)
- Рівень проекту і файлова система (vim_prj, nerdtree)
- Snippets і шаблони файлів (UltiSnips, vim_template)
- Компіляція і виконання чого завгодно (vim_start)
- Робота з Git (vim_git)
- Деплой (vim_deploy)
- Тестування за допомогою xUnit (vim_unittest)
- Бібліотека, на якій все тримається (vim_lib)
- Інші корисні плагіни
Я користувався, напевно, усіма популярними менеджерами плагінів для Vim і у мене не було ні найменшого бажання писати свій власний, так як ці мене цілком влаштовували, але було невелике але, про який я розповім в цій статті.
Основною проблемою більшості популярних менеджерів плагінів для Vim є те, що вони заповнюють змінну runtimepath абияк. До чого це веде? Модулі завантажуються безпорядочно, немає можливості перевизначити налаштування плагіна для конкретного проекту, плагіни скасовують ваші власні настройки Vim і т.д. Все ще більше посилюється неможливістю контролювати порядок завантаження плагінів, коли потрібно спочатку завантажити плагін A, а тільки потім залежний від нього Благиня B. Одним словом - біль.
- Системному ($ VIMRUNTIME /) - конфігурації і плагіни, які поширюються на всіх користувачів системи
- призначені для користувача (
Бібліотека vim_lib визначає як структуру плагінів Vim (але не обмежує вас тільки цією структурою, може використовуватися будь-який плагін), так і порядок їх підключення і завантаження, для цього реалізовані класи sys / Plugin і sys / Autoload відповідно.
Якщо реалізувати плагін в суворій відповідності до вимог класу sys / Plugin. то ми отримаємо наступну структуру:
Файл plugin / myPlugin.vim містить логіку ініціалізації і підключення плагіна.
Файл doc / myPlugin.rux містить документацію до плагіну.
Навіщо все це потрібно? По-перше стандартизація. Писати, змінювати і розбиратися в плагінах легшає. По-друге їх простіше відключити.
Детальніше можна почитати тут.
/.vimrc)Взагалі клас sys / Authoload дозволяє реалізувати будь-яку ієрархію вкладеності і пріоритет конфігурацій, а не тільки триступеневу, але я не побачив необхідності додавати нові рівні.
Для використання автозавантаження, пропонованої класом sys / Authoload. досить додати в ваш файл .vimrc наступні рядки:
Зробити це можна не тільки на призначеному для користувача рівні (
/.vimrc), але і на системному ($ VIMRUNTIME / .vimrc) або проектному (./.vimrc), при цьому логіка автозавантаження буде поширюватися тільки від даного рівня і «нижче». На всіх нізлежайшіх рівнях досить просто підключати нові плагіни, доступні тільки цього рівня:
Для відключення плагіна, досить просто закоментіровать рядок Plugin 'ім'я'.
Конфігурувати плагін можна прямо під час його підключення:
На більш низьких рівнях можна перевизначити ці конфігурації:
Все дуже гнучко і зручно.
Здавалося б, що заважає змусити інші менеджери плагінів встановлювати плагіни в потрібні нам каталоги (системний, призначений для користувача або проектний)? Проблема тут в тому, що інші менеджери не просто встановлюють сторонні плагіни, а й визначають порядок з ініціалізації, а нам це не потрібно (вже реалізовано класом sys / Authoload бібліотеки). Та сама проблема несумісності Vim плагінів, про яку я говорив в попередній статті. Довелося писати своє рішення.
vim_plugmanager має досить простий інтерфейс і дозволяє встановлювати плагіни з GitHub в системний каталог, каталог користувача або проектний каталог, в залежності від того, де ви зараз перебуваєте.
Вікно із списком плагінів
Як видно на малюнку, vim_plugmanager реалізований у вигляді вікна, в якому він відображає список встановлених на даний момент плагінів (саме встановлених, а не підключених) з угрупованням за рівнями. Для додавання нового плагіна досить натиснути клавішу a. а для видалення навести курсор на плагін і натиснути dd (дуже звично, чи не так?).
Детальніше можна почитати тут.
У цій статті я висвітлив далеко не всі проблеми, зякими я зіткнувся при іспользоніі плагінів Vim, а так само не всі можливості описаних рішень. Не думаю, що варто копіювати документацію, коли вона доступна в загальному доступі.
Можливо, я міг обійтися вже наявними рішеннями, схрестивши їх між собою, але в цьому випадку був ризик витратити набагато більше часу, а в результаті отримати не те, що мені було потрібно.