Найти тему
На ты с Ай-Ти

Vim. "Косим" под IDE

Оглавление

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 может пригодиться :)