Поговорим о самом противоречивом редакторе текста с 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 – это отличный редактор, который заставит вас полностью переосмыслить то, как вы обычно работаете с кодом. Да, изучать его сложно, но если вы потратите на это время и силы, то будете вознаграждены.
Комментарии
Странно сравнивать Vi/Vim и nano. У nano совершенно явная ниша: он очень лёгок в освоении (разумеется, не для мышезависимых) и работает где угодно, но для серьёзного редактирования он недостаточно функционален. Для серьёзного редактирования лично я использую Geany; у него есть один недостаток: он не работает вне графической оболочки.
Редакторы Vi и Vim работают где угодно и достоточно функциональны для серьёзного редактирования, но я не чувствую себя настолько умным, чтобы использовать их.