С Vim удобно программировать (часть III)
В двух предыдущих частях уже разбиралось, как превратить Vim в полноценную рабочую среду для разработки. Сейчас сосредоточимся на практике: разберём небольшой учебный проект на Ruby с использованием Sinatra и посмотрим, как органично вписать в этот процесс Git. По ходу дела станет ясно, как Vim помогает выстраивать компактный, но эффективный рабочий процесс без необходимости постоянно переключаться между окнами и приложениями.
1. Учебный проект на Ruby + Sinatra
Sinatra - минималистичный фреймворк для Ruby, идеально подходящий для создания небольших веб‑приложений и учебных примеров. Предположим, что Ruby у вас уже установлен, Sinatra добавлен (как гем), и базовые шаги установки проблем не вызывают.
Задача: cделать простейший учебный сайт на связке Ruby + Sinatra (примерно как в одном из уроков по Ruby). Структура проекта будет очень простой: один ruby‑файл с логикой приложения и одно представление (шаблон) с HTML‑страницей, которая выводит заголовок:
```html
Hello!
```
Структура проекта
Создадим папку проекта, допустим, с именем `19`. Внутри неё будет размещён основной файл приложения:
- `app1.rb` - главный скрипт Sinatra
- каталог `./views` - папка для представлений (шаблонов)
- файл `./views/index.erb` - единственный шаблон с нашим "Hello!"
Дерево каталогов в итоге должно выглядеть так:
```text
19/
app1.rb
views/
index.erb
```
Используем файл проекта Vim
Для управления файлами удобно использовать так называемый файл проекта (обычный текстовый список имён файлов, с которым Vim умеет работать как с набором вкладок).
1. Переходим в каталог `19`.
2. Запускаем Vim командой (из терминала) вида:
```bash
vim project
```
Здесь `project` - это имя текстового файла, в котором мы будем хранить список файлов проекта.
3. Внутри Vim добавляем в этот файл строку:
```text
app1.rb
```
4. Сохраняем изменения и выходим:
```vim
:wq
```
5. Снова запускаем:
```bash
vim project
```
Теперь Vim откроет "проект" и автоматически создаст вкладку для `app1.rb` (если настроен соответствующий сценарий или плагин; предположим, что это уже сделано, как описывалось ранее).
Наполняем основной файл приложения
Откройте вкладку с `app1.rb` и добавьте в него минимальный код Sinatra:
```ruby
require 'sinatra'
get '/' do
erb :index
end
```
Здесь:
- `require 'sinatra'` - подключение фреймворка;
- маршрут `get '/' do ... end` описывает реакцию на запрос к корню сайта;
- `erb :index` означает, что нужно отрендерить шаблон `index.erb` из каталога `views`.
После этого сразу становится ясно, что нам не хватает файла представления `./views/index.erb`.
Добавляем шаблон в проект
Чтобы Vim начал учитывать и файл шаблона, просто допишем его путь во всё тот же файл проекта:
1. Внутри Vim откройте вкладку с файлом `project` (или буфер, где он лежит).
2. Добавьте вторую строку:
```text
./views/index.erb
```
3. Сохраните все открытые файлы:
```vim
:wa
```
4. Выйдите из Vim целиком:
```vim
:qa
```
Чтобы выполнять эти команды быстрее, удобно сделать сопоставления (маппинги) для режима вставки, например:
```vim
inoremap :wa
inoremap :qa
```
Теперь сочетание `Ctrl-w` сохранит все открытые файлы, а `Ctrl-q` завершит работу Vim, не выходя из режима вставки.
Затем снова запускаем Vim командой:
```bash
vim project
```
Теперь редактор увидит вторую строку в файле проекта и откроет ещё одну вкладку - уже для `./views/index.erb`.
Верстаем представление
Переходим во вкладку с `index.erb` и добавляем туда HTML‑код:
```html
Hello!
```
Шаблон готов, структура приложения завершена.
Запуск приложения прямо из Vim
Чтобы не прыгать каждый раз в терминал, удобно настроить запуск проекта по горячей клавише в Vim, например по `Ctrl-F5`. Конкретная команда может быть оформлена по‑разному, но по сути она должна запускать:
```bash
ruby app1.rb
```
После запуска Sinatra, по умолчанию, поднимает локальный сервер на порту 4567. Остаётся открыть браузер и перейти на страницу:
```text
localhost:4567
```
Вы увидите страницу с заголовком "Hello!". Останавливаем сервер `Ctrl-c` в терминале - и возвращаемся обратно в уже открытый Vim.
Таким образом, весь цикл - редактирование кода, запуск приложения, проверка результата и возврат в редактор - выполняется практически без трения. Постепенно такой способ работы начинает напоминать REPL, встроенный прямо в Vim: вы меняете код, быстро перезапускаете приложение и сразу видите результат.
2. Интеграция с Git: фиксируем изменения без лишних движений
Git - стандартный инструмент контроля версий, и большинство разработчиков знакомы хотя бы с базовым набором команд. Посмотрим, как можно использовать уже существующий файл `project`, чтобы упростить одну из довольно рутинных операций - добавление файлов в индекс.
Инициализация репозитория
Перейдите в корень каталога проекта `19` и выполните обычную инициализацию:
```bash
git init
```
Теперь в этом каталоге создан новый Git‑репозиторий.
Автоматическое добавление всех файлов проекта
Логично, что отслеживать в Git нужно именно те файлы, которые мы включили в проект Vim: `app1.rb`, `./views/index.erb` и при необходимости другие, которые будут со временем появляться. Вместо того чтобы перечислять каждый файл руками, можно использовать содержимое файла `project`:
```bash
git add `cat project`
```
Команда ```cat project``` вернёт список файлов, а `git add` получит его как аргументы. В результате все файлы, которые вы считаете частью проекта (и уже внесли в `project`), автоматически попадут в индекс Git.
Проверим статус:
```bash
git status
```
Git покажет, что в индекс добавлены именно те файлы, которые задекларированы в файле проекта. Такой небольшой трюк снимает необходимость вручную перечислять каждый новый файл при добавлении в репозиторий.
Дальше можно работать в стандартном режиме:
- создать первый коммит;
- при необходимости настроить удалённый репозиторий;
- регулярно фиксировать изменения по мере развития проекта.
3. Почему такая связка удобна в повседневной работе
Комбинация Vim + Sinatra + Git в этом учебном примере показывает несколько важных принципов эффективной работы:
1. Один инструмент - много задач.
Vim служит не только редактором, но и центральной точкой управления проектом: из него удобно запускать приложение, переключаться между файлами, сохранять все изменения разом и т.д.
2. Минимум контекста, максимум концентрации.
Вы не отвлекаетесь на постоянное переключение между IDE, терминалом, файловым менеджером и прочими окнами: подавляющее большинство действий делается из одного интерфейса.
3. Файл проекта как единый источник правды.
Тот же список файлов использует и Vim, и Git. Если вы добавили что‑то в проект, это автоматически может быть добавлено в репозиторий. Меньше дублирующих действий - меньше шансов что‑то забыть.
4. Быстрая обратная связь.
При запуске Sinatra из Vim и последующей проверке результата в браузере создаётся короткий цикл "правка - запуск - проверка". Это особенно важно на ранних этапах обучения, когда хочется как можно быстрее видеть результат своих действий.
4. Расширение проекта: шаги для дальнейшего развития
После того как базовый пример с "Hello!" заработал, логично двигаться дальше и использовать те же приёмы Vim для более сложных задач:
- Добавить новые маршруты в Sinatra, например `/about`, `/contacts`;
- В папке `views` создать дополнительные шаблоны: `about.erb`, `contacts.erb`;
- В файл `project` вписать новые представления, чтобы Vim автоматически подхватил их во вкладки;
- С помощью уже знакомого трюка `git add `cat project`` зафиксировать расширившийся набор файлов в Git.
Так шаг за шагом можно строить простое, но структурированное приложение, не усложняя инфраструктуру и не перегружая себя тяжеловесной IDE.
5. Полезные приёмы Vim для работы над веб‑проектами
Чтобы работа стала ещё комфортнее, стоит обратить внимание на несколько дополнительных возможностей Vim:
1. Сопоставления для часто используемых команд.
Помимо уже приведённых `inoremap :wa` и `inoremap :qa`, можно создать горячие клавиши для запуска тестов, перезапуска сервера, перехода между связанными файлами (например, контроллер ↔ представление).
2. Окна и вкладки.
Для небольших проектов удобно держать, скажем, `app1.rb` и `index.erb` в двух соседних окнах (`:split` / `:vsplit`), чтобы одновременно видеть код маршрута и шаблон, с которым он работает.
3. Шаблоны и сниппеты.
Часто повторяющиеся конструкции - заготовка маршрута Sinatra, каркас HTML‑страницы, стандартный блок `layout` - можно оформить в сниппеты, вставляемые по нескольким нажатиям клавиш.
4. Подсветка синтаксиса и автодополнение.
Правильно настроенная подсветка Ruby и HTML/ERB помогает заметить опечатки и синтаксические ошибки ещё до запуска приложения, а автодополнение - уменьшить количество рутинного набора.
6. Организация работы с несколькими окружениями
Когда проект разрастается, появляется потребность аккуратно разделять рабочее, учебное и, возможно, продакшн‑окружения. Даже для небольших учебных приложений полезно поддерживать понятную структуру:
- Использовать отдельные ветки Git для экспериментов;
- Создавать в файле `project` группы файлов, относящихся к разным частям проекта (например, комментариями внутри самого файла);
- При необходимости иметь несколько файлов проекта - для разных подпроектов или лабораторных работ.
Vim в таком подходе остаётся единым интерфейсом, а Git и Sinatra - инструментами, которые легко вписываются в уже установленный рабочий поток.
7. Итоги
Простой пример с Ruby и Sinatra показывает, как Vim превращается в удобную платформу для разработки даже без тяжёлых IDE:
один файл проекта описывает структуру кода, тот же список используется для Git, запуск приложения выполняется прямо из редактора, а горячие клавиши и маппинги ускоряют рутинные операции.
При таком подходе Vim перестаёт быть "просто редактором", а становится центром всей разработки. И если один раз настроить подобный рабочий процесс под себя, он начинает экономить время и силы каждый день - особенно в задачах, где важны скорость обратной связи и минимум отвлечений.




Комментарии