Vim - текстовый редактор для смелых. Не буду объяснять, что это такое, но для тех, кто ленится использовать мышку при наборе текста - советую попробовать.
Надо отметить, что сейчас Vim живет не только в консоли - можно найти различные плагины для IDE: например, ideavim для IntelliJ Idea и Vim для VS Code. Это позволяет брать лучшее из двух миров - "фичи" современных IDE и удобство вима.
В этой статье я не буду рассказывать, как "сделать из вашего Vim полноценную IDE" (не думаю, что это возможно). Попробуем просто достичь визуального результата
Обычно в своих любимых IDE я работаю так:
Попробуем повторить в Виме?
Для начала
Я использую NeoVim, работаю на Ubuntu, поэтому все, что будет дальше, верно для такого сетапа. Однако, не думаю, что для другого окружения возникнут какие-то проблемы.
Разделяй и властвуй
Для начала разделим экран. Тут все просто. Открываем Vim и начинаем:
Разделение:
- Ctrl+w, S - делим экран пополам горизонтально(S - заглавная!)
- Ctrl+w, v - делим экран пополам вертикально
- Ctrl+w, + - увеличиваем область по вертикали
- Ctrl+w, - - уменьшаем область по вертикали
- Ctrl+w, > - увеличиваем область по горизонтали
- Ctrl+w, < уменьшаем область по горизонтали
Навигация:
- Ctrl+w, Ctrl+w - переход в следующую область
- Ctrl+w, h/j/k/l - переход в область слева/снизу/сверху/справа (помним, что hjkl - это клавиши перемещения в Vim)
Ну и, наконец, закрыть область можно, нажав Ctrl+w, q.
Применив полученные знания, я пришел к такому:
Уже похоже на IDE. Правда, это просто 4 текстовых редактора.
Терминал
В NeoVim есть режим терминала! Переходим в нижний предназначенный для него редактор и вводим команду
Вот мы и в терминале! Более того, это терминал из Вима! Можно переходить в Normal Mode и осуществлять навигацию по любым строкам: переходить выводу команд, предыдущим командам...
Единственное, что Esc здесь не работает. Прежде, чем пользоваться терминалом, я переназначаю HotKey:
Дерево с файлами в директории
Здесь можно воспользоваться плагином netrw, который поставляется вместе в vim. Чтобы запустить его, переходим в самую левую часть с помощью клавиш навигации, вводим команду и смотрим на результат:
Немного раздражает появившийся заголовок, но мы его уберем чуть позже
Автоматизация
Прежде чем завершить статью, хочется сделать так, чтобы не приходилось каждый раз делить экран вдоль и поперек, перенастраивать клавиши и двигать границы "окон". Попробуем это автоматизировать.
Давайте создадим функцию, при вызове которой все наши действия, указанные выше, выполнятся автоматически. Функцию для NeoVim можно задать в файле ~/.config/init.vim . Нам понадобится:
- команда wincmd - по сути, заменяет сочетание Ctrl+w
- команды res и vertical resize - для того, чтобы двигать границы наших визуальных областей
- функции winwidth и winheight, для того, чтобы вычитать текущие размеры окна и отталкиваться от них
Вот что у меня получилось:
Не буду углубляться в незамысловатый синтаксис, просто отметим, что мы переназначили использование Esc в терминале с помощью tnoremap, убрали баннер с помощью переменной netrw_banner и немножко изменили политику открытия документов из дерева переменной netrw_browse_split. Также, теперь мы не зависим от размера изначального окна, размеры считаются относительно (кроме окна терминала).
Вставляем код в файл ~/.config/init.vim и после запуска вводим в Vim следующую команду:
Еще немного поигравшись с размером терминала получил вот такой вот итоговый результат:
Заключение
Не уверен, что такая настройка Vim'a будет кому-то полезна в при использовании. Однако, для изучения возможностей работы Vim может пригодиться :)