Поговорим о самом противоречивом редакторе текста с 50-летней историей.
Что такое Vim?
Vim – это древняя модификация текстового редактора Vi, созданного Биллом Джоем в 1976 году. Vim, в свою очередь, появился спустя 15 лет и стал одним из наиболее значимых приложений в истории компьютеров.
Vim использует довольно специфичную по нынешним временам модель управления, полностью построенную на идее модальности в угоду устаревшим клавиатурам, на которых не было стрелок и других уже привычных для нас клавиш.
Несмотря на то, что нужды в Vim сейчас нет, он все еще популярен. Его поклонники образовали чуть ли не религиозный культ, строго верующий в Vim, защищающий его от противников и всячески продвигающий в обществе как лучшее, что могло быть изобретено для редактирования текста.
99% поклонников Vim – это разработчики и гики, пытающиеся добиться максимальной эффективности от используемых инструментов, и Vim в этом всяческим им помогает за счет гибкой системы настроек, такого же гибкого управления и бесконечной модифицируемости.
Давайте же подробнее разберемся в том, чем примечателен Vim и стоит ли вообще его пробовать.
Чем хорош Vim?
Надо сразу сказать, что популярность Vim обоснована не только одной лишь верой в святость редактора и его преклонным возрастом. Да, эти факторы имеют значение, но в основе все же лежит рабочая идея и богатая функциональность.
Эффективность
Мы еще поговорим об основных концепциях Vim, когда затронем его философию, но главная причина любви к Vim – его эффективность.
Досконально изучив инструмент и натренировавшись в его использовании, вы становитесь на голову выше других спецов, потому что попросту тратите меньше времени на выполнение рутинных задач. Быстрее удаляете строки, быстрее перемещаетесь по коду, быстрее вносите изменения в разных участках файла и приложения целиком. При этом тратите не только меньше времени, но и меньше сил.
Вездедоступность
Вы учите Vim один раз и пользуетесь им везде. Независимо от выбранной ОС, у вас всегда будет доступ к Vim, и он будет таким же, как Vim в любой другой системе (если, конечно, вы не обвешаете редактор на своем ПК плагинами и темами).
А чем плох?
Возникает вопрос, почему Vim не используют все разработчики, раз он такой хороший. Ответ кроется в пороге вхождения. Он настолько высок для нового поколения пользователей ПК, что в интернете до сих пор гуляют мемы про то, как сложно закрыть Vim, если случайно его запустил.
Vim, без преувеличения, сложен в освоении. Даже заставить человека отказаться от использования стрелок и перейти на так называемый home-блок клавиш – тот еще квест.
Так выглядели клавиатуры раньше. Здесь есть только home-блок
Чтобы освоить Vim и получить от него пользу (и удовольствие, конечно же), надо этого захотеть. А захотят ли этого разработчики? Только энтузиасты, которым не сидится на месте ровно и хочется что-нибудь понастраивать и поломать. А работяги в энтерпрайзе, привыкшие ко всем благам IntelliSense и безумного рефактор-тула от JetBrains, вряд ли поверят, что тратить время на изучение архаичного редактора – хорошая идея.
Философия Vim
Как я уже писал выше, Vim – не просто программа, а целое движение в мире IT. Поэтому на начальных этапах знакомства с редактором вы наверняка будете испытывать неловкость и закономерное недоумение. Вероятно, так себя чувствуют люди, которые вот-вот вступят в какую-то секту.
Но когда вы перешагнете грань, вы устремитесь в дивный мир модальности и архаичного управления, заставляющего иначе взглянуть на работу с компьютерами в целом, а не только на редактирование кода.
Никаких мышей
Первая часть глобальной концепции Vim – полный отказ от мыши как от органа управления компьютером. Во времена, когда Vi только зародился, подобных манипуляторов в ходу не было. Клавиатура была единственным способом взаимодействия с компьютером (и на ней даже стрелок не было).
Управление осуществлялось с помощью специальных текстовых команд и сочетаний клавиш.
Современный Vim полностью наследует эту особенность и возвращает нынешних программистов в прошлое, позволяя отказаться и от мыши, и от необходимости покидать home-блок клавиатуры (ряд клавиш, до которых дотягиваются пальцы при их размещении на специальных бугорках-навигаторах для слепой печати).
Модальность
Одна из вещей, которая с ходу ставит в ступор большинство новичков, решивших начать изучение Vim – это перемещение по тексту с помощью клавиш H,J,K,L. То есть нельзя сразу открыть редактор и начать менять в нем текст. Для этого нужно зайти в специальный режим.
В Vim есть несколько режимов. Два основных:
COMMAND – в нем нельзя менять текст (только удалять отдельные знаки), потому что он создан для управления программой и ее интерфейсом – для перемещения по коду, деления экрана на несколько частей, открытия новых документов и прочих утилитарных задач.
INSERT – этот режим позволяет редактировать текст, как в любом другом редакторе. То есть вы пишите что-то, а контент тут же отображается.
Между этими режимами нужно постоянно переключаться, чтобы управлять программой и при этом вводить в текст. Для этого в Vim есть сразу несколько клавиш.
Также есть отдельный режим для копирования текста и его вставки.
Изначально явление модальности в Vim обосновано ограниченностью клавиатур 50-летней давности, а сейчас нежеланием некоторых разработчиков выламывать себе кисти в попытках добраться до стрелок или трекпада. И это, пожалуй, главное преимущество Vim.
Vim и священные войны
Vim, почти как и любой продукт с большой аудиторией, формирует вокруг себя что-то в духе идолопоклонничества. Появляется масса пользователей, устраивающих конфликты на ровном месте.
Поэтому в сети найдется по меньшей мере пара сотен форумных веток, в которых фанаты Vim ругаются с адептами Emacs или Nano. Уровень адекватности там на минимуме.
Vim – действительно отличное приложение с целой философией, но все же не божество какое-то. Это редактор, такой же, как все остальные, и строить вокруг него культ нелепо. Так что, освоив Vim, не начинайте развязывать холивары на просторах сети.
Как установить Vim и начать им пользоваться?
Впоминаем, что Vim по умолчанию установлен во всех популярных операционных системах, и сразу же отметаем пункт с установкой. Не нужно ничего скачивать или устанавливать. Достаточно запустить Vi и выбрать файл, который нужно с помощью него открыть.
Для этого:
Запускаем терминал в Linux и macOS или программу PowerShell в Windows. Вводим команду:
cd [путь/до/папки/с/файлом]
Затем запускаем редактор с помощью команды:
vi [путь/до/файла/название-файла.js]
Перед вами появится текст выбранного файла. По умолчанию в нем не будет ни подсветки синтаксиса, ни автодополнения, ни других привычных вещей. Вас ждет голый текст и непривычное управление.
На этом моменте и начинается знакомство с Vim.
Базовые клавиши для управления
Для начала нужно освоиться в управлении и понять, что можно делать в Vim, а чего нельзя. Чтобы перемещаться по тексту, используем клавиши H (влево), J (вниз), K (наверх), и L (вправо).
Чтобы удалить текст, мы используем клавишу X. Для выделения текста нужно перейти в визуальный режим при помощи клавиши V.
А чтобы ввести текст, переходим в режим INSERT. Это можно сделать несколькими способами, но вот два основных:
Нажатие на клавишу I, чтобы начать ввод текста прямо на месте курсора.
Нажатие на клавишу O, чтобы начать ввод на новой линии.
Для выхода из режима INSERT, нажимаем на кнопку Esc или комбинацию клавиш Ctrl + {.
Чтобы скопировать текст, используем клавишу Y, а чтобы вставить – P.
Модификаторы команд
Большая часть опций в Vim реализуется через комбинации клавиш. Попытавшись набрать какой-то текст в режиме Command, вы увидите, что в командной строке внизу окна появляются символы, но ничего не происходит, если вы не попадете в какую-либо команду.
Например, если ввести в это поле dd, то Vim удалит строку, на которой расположен курсор. Если ввести gg, то курсор перескочит в начало файла и т.п. К командам можно добавлять цифры, тогда она будет применяться несколько раз. 5dd – удалить не одну линию, а сразу 5.
Чтобы закрыть Vim, нужно ввести команду :wq. Она запишет внесенные изменения и вернет вас в терминал. Чтобы изменения не сохранялись, надо ввести :q!.
Краткий референсный список команд
- 7j – сместит курсор на 7 строк вниз.
- w – сместит курсор на одно слово вперед.
- G – сместит курсор в конец документа.
- dw – удалит одно слово.
- dt< – удалит текст вплоть до символа <.
- cc – удалит весь контент со строки и переведет редактор в режим INSERT.
- . – повторно активирует последнюю выполненную команду.
- /function – найдет в тексте слово function (все его повторения).
С полным списком можно ознакомиться во встроенном обучающем приложении или в документации к Vim.
Управление интерфейсом
Помимо команд для работы с текстом, в Vim есть отдельный список команд для взаимодействия с внешними файлами и интерфейсом. Здесь я опишу только две из них, чтобы вы поняли идею.
:split – поделить редактор на два окна. Такой режим можно использовать как для просмотра одного документа в двух разных местах, так и для параллельного редактирования нескольких документов.
:edit – позволяет выбрать файл, который мы будем редактировать.
Базовая конфигурация
Универсального конфигурационного файла для Vim, который подошел бы всем, не существует. Все равно придется самостоятельно подбирать для себя удобный набор параметров и расширений.
Но есть пара опций, которые нужно изменить сразу, чтобы Vim ощущался более канонично и работал так, как это подразумевалось 50 лет назад.
Открываем конфигурационный файл при помощи команды:
vi ~/vim/.vimrc
Внутри прописываем текст inoremap jj <ESC>. Эта директива заменит нажатие ESC на команду jj. Это более естественный и удобный способ выхода из INSERT-режима.
Так как мы часто используем клавишу Ctrl внутри Vim, надо переназначить ее на что-то близкое к home-блоку клавиатуры, например на Caps Lock.
- Затем меняем базовый список директив для отображения количества линий, включения отображения подсветки синтаксиса и т.п.
syntax on # highlight syntax set number # show line numbers set noswapfile # disable the swapfile set hlsearch # highlight all results set ignorecase # ignore case in search set incsearch # show search results as you type
Может ли Vim заменить современные редакторы?
Да, причем может обойти их в плане функциональности. Последнии версии Vim можно сильно модифицировать, добавив туда поддержку современных языков программирования и дополнительных утилит, упрощающих разработку.
Фактически его можно превратить в полноценную IDE. Для этого нужно только найти подходящие плагины. С авдополнением кода и подсветкой синтаксиса проблем не будет. Установить ESLint и Prettier тоже можно. Даже поддержка TypeScript не станет проблемой. Свежие языки в духе Rust будут работать.
Более того, у Vim есть модификация под названием Neovim, которая весь этот набор опций предоставляет по умолчанию, с удобнейшим менеджером плагинов для расширения функциональности редактора, сохраняя его уникальную концепцию.
Vim актуален в 2022 году. Для него создают плагины, его поддерживают и обновляют.
Neovim
Neovim – это попытка сохранить все лучшее, что есть в Vim, и при этом убрать все недочеты, коих не так мало в связи с возрастом редактора.
Создатели Neovim добавили в редактор удобный пакетный менеджер, позволяющий устанавливать более продвинутые версии плагинов на базе языка LUA. Также в нем есть поддержка LSP, что гарантирует подсветку синтаксиса и автодополнение кода для любых существующих языков программирования.
В Neovim можно добавить функцию Fuzzy Search, боковую панель для быстрого поиска файлов в проекте, вкладки, интеграцию с GitHub и даже дебаггер.
Это значит, что решившись на переход с VSCode в Neovim, при грамотной настройке и толике терпения, вы не потеряете вообще ничего. С функциональной точки зрения у вас будет идентичная среда разработки. При этом вы получите все прелести Neovim в виде очень высокой производительности, независимости и удобной системы управления текстом.
Если есть желание опробовать Vim, но нет желания лишаться благ современных приложений для разработки, то Neovim – то, что нужно.
Другие редакторы, поддерживающие идею Vim
Концепция Vim близка не только создателям самого редактора в его современной итерации. Подобную модель управления можно встретить в других редакторах и добавить в другие приложения (даже не связанные с разработкой ПО).
Редакторы с управлением, как в Vim
OniVim 2 – это комбинация сразу трех редакторов: Sublime Text, Vim и VSCode. Красивый редактор с высокой производительностью, поддержкой плагинов для VSCode и управлением, как в Vim.
LunarVim – еще одна полноценная IDE на базе Neovim.
Другие Vim-подобные расширения и приложения
Vimium – это дополнение для Google Chrome, позволяющее перенести управление браузером с мыши на клавиатуру. Полностью.
Vimac – то же, что и Vimium, только в масштабах операционной системы (утилита для macOS).
VSCodeVim – расширение для VSCode, заменяющее стандартную модель управления на ту, что принята в Vim.
Конкуренты Vim
Фанатам Vim ведь нужно с кем-то ругаться на форумах. Для этого нужны редакторы с иной идеологией, и таких хватает. Причем речь идет не о современных решениях вроде WebStorm. Речь о таких же консольных редакторах, но с иным управлением.
nano – очень популярный редактор. Известен почти так же, как и Vim, потому что доступен почти на всех операционных системах, включая macOS.
Emacs – в ранних итерациях запускался в консоли и был одним из первых с ныне привычной системой управления.
slap – что-то среднее между nano и vim. С полноценной поддержкой мыши для тех, кто все же не может отказаться от нее и не готов учиться работать только с клавиатурой.
Как выучить Vim?
Если вы собрались с мыслями и все-таки решили, что концепция Vim вам по душе, то нужно с умом подойти к его изучению. Эта статья не тянет на гайд, поэтому посоветую почитать другие.
Статья Дэниеля Мислера – пожалуй, лучший ликбез по Vim. Расписано все – от базовой конфигурации до самых труднообъяснимых концепций. Достаточно прочитать этот материал, и вы будете отлично ладить с Vim и сможете настроить его под свои нужды.
Официальная документация Neovim – отлично скомпонованная вики-подобная коллекция статей про Vim, помогающая быстро понять, что к чему. Материалы удобно категоризованы, поэтому к ним легко возвращаться по мере необходимости, чтобы подтянуть конкретные знания.
Вместе с Vim в комплекте идет утилита под названием Vimtutor. Это интерактивная школа по обучению азам Vi. Можно начать свое знакомство с редактором именно с Vimtutor, но я бы все же советовал два вышепредложенных варианта.
Вместо заключения
На этом все. Vim – это отличный редактор, который заставит вас полностью переосмыслить то, как вы обычно работаете с кодом. Да, изучать его сложно, но если вы потратите на это время и силы, то будете вознаграждены.