Курс по Vim. Часть 1. История текстовых редакторов и эволюция Vim
Мы запустили бесплатный видеокурс по легендарному редактору кода — Vim. В нём 16 небольших уроков. Сегодня — история текстовых редакторов.
Иллюстрация: Polina Vari для Skillbox Media
За 16 уроков мы рассмотрим всё, что нужно для старта работы с Vim:
- историю текстовых редакторов;
- работу в режиме вставки, в командном режиме, режиме командной строки, визуальном режиме;
- использование регулярных выражений и создание макросов;
- плагины, пакетные менеджеры плагинов;
- конфигурацию Vim, работу с файлом .vimrc (в частности, на примере файла .vimrc автора курса);
- работу с Neovim;
- настройку автодополнения.
Сегодня будет два видеоурока. Разберём, зачем Vim нужен современным разработчикам, как развивались текстовые редакторы и какие режимы работы есть в Vim.
Как устроен курс
Мы публикуем видеоуроки и текстовые расшифровки — вы можете смотреть или читать теорию.
Автор курса
Паша Калашников
Тимлид в Purple Magic, продюсер видео в Red Magic, соведущий IT Way Podcast, автор курсов по этому вашему программированию. Любит Ruby.
Урок 1
Зачем Vim нужен современным программистам
Главное, что вы узнаете сегодня, — как выйти из Vim :) Если вы уже хотя бы что-то слышали о нём, то эта проблема вам точно знакома, а если нет… Что ж, пользовательский опыт в Vim настолько необычный, что существует куча шуток в стиле «зашёл в Vim, вышел только через перезагрузку компьютера» или «зашёл в Vim в 2007-м, до сих пор не могу выйти».
Ну так вот: чтобы выйти из Vim, нужно несколько раз нажать клавишу Esc. Это почти гарантирует выход из всех режимов, в которые вы могли войти, пока судорожно нажимали другие клавиши. После этого вводим :q — эти символы появятся в командной строке, которая находится внизу. Нажимаем Enter. Поздравляем, вы вышли из Vim!
Это был исчерпывающий курс по Vim от Skillbox Media. Спасибо, что были с нами! Удачи в использовании. 😏
А, постойте, мы же не рассказали, как в него войти 😏 Итак, если у вас Linux или macOS, значит, Vim вам устанавливать уже не придётся. Просто откройте окно терминала и введите команду vim.
Если же у вас Windows — зайдите в раздел «Загрузки» на официальном сайте и скачайте установщик. Верим, что два раза кликнуть по EXE-файлу вы догадаетесь и без нас — не зря же вы заинтересовались этим курсом 😏
Зачем Vim нужен в 2021 году
Давайте ответим на вопрос, кому и зачем может понадобиться Vim в третьем десятилетии XXI века.
Первый ответ, который мы можем услышать, — чтобы поковыряться на удалённом сервере; ведь Vim есть почти на любом сервере. Это действительно так, однако в век Docker и Kubernetes чаще всего не нужно переходить на сервер по SSH и тем более копаться на этом сервере с помощью Vim. Так что этот вариант перестаёт быть актуальным.
Второй вариант ответа: это отличная IDE — среда разработки. И как это ни странно, в мире, где существуют десятки прокачанных и полезных текстовых редакторов и IDE, люди до сих пор выбирают Vim. Почему?
На это есть три причины:
- слепой десятипальцевый метод ввода на клавиатуре;
- конфигурация без ограничений;
- программирование редактирования.
Разберём их подробнее.
Слепой десятипальцевый метод
Многие современные IT-специалисты игнорируют слепой десятипальцевый метод ввода. Обычно в материалах и курсах, которые я делаю, я стараюсь не навязывать те или иные компетенции и инструменты и всегда оставляю выбор за слушателем. Однако слепой десятипальцевый метод ввода к ненавязываемым методам я не отношу.
Я считаю, что владение слепой печатью — это навык, которым должен обладать любой, кто большую часть своего рабочего времени проводит за компьютером.
Важный момент: если вы до сих пор не обладаете навыком слепого десятипальцевого ввода, не переходите на Vim. Вас будет ожидать только дискомфорт.
Так вот — Vim позволяет использовать десятипальцевый метод для редактирования текста совсем без мышки или тачпада. Это совершенно особый тип мышления при редактировании текста — и такой опыт даст почувствовать только Vim. Никакой другой текстовый редактор или IDE не даёт возможности изменения мышления. В случае с Vim каждый специалист может найти свой дзен в использовании десятипальцевого метода редактирования текста.
Однако в использовании Vim на современных клавиатурах есть одна проблема: когда создавался Vim, клавиши Esc и Ctrl находились там, где сейчас красуется Caps Lock. Если вы будете использовать стандартные настройки Vim, вам придётся изгибать руку, чтобы дотянуться до Ctrl, и уводить её, чтобы дотянуться до Esc. Здесь хочется посоветовать сразу две настройки.
- В настройках операционной системы заменить клавишу Ctrl на Caps Lock. Это полезно не только для Vim, а в целом для всех программ, в которых вы работаете, потому что современные пользователи практически не используют Caps Lock. В итоге у вас в очень важном и удобном месте находится неиспользуемая клавиша, а часто используемый Ctrl пылится в самом углу и к нему каждый раз приходится тянуться. Перенеся Ctrl на Caps Lock, вы сразу почувствуете свободу. Попробуйте, это прекрасно!
- Вместо Esc лучше использовать комбинацию Ctrl + [. Кажется, что это сложно, однако со временем вы поймёте, что зажимать Ctrl + [ вместо Esc, которая находится очень далеко, — гораздо проще. Есть ещё одна опция: подобрать клавиатуру, на которой Esc будет ближе. Правда, сколько я ни искал такие варианты, я их не нашёл. Может быть, вам повезёт.
Конфигурация без ограничений
В чём главное различие между пользователями Windows, macOS и пользователями Linux? Если что-то не работает в Windows или macOS — виновата операционная система, если что-то не работает в Linux — виноваты, скорее всего, вы.
В случае с Vim справедлив тот же подход. Открывая Vim сразу после установки, вы видите пустой редактор (буквально пустой, это не метафора). Набор фич, которые будут доступны в редакторе, зависит только от вас. Написание собственных скриптов, с которыми вам будет удобнее работать с кодом, в Vim гораздо проще, чем в сложных IDE.
Например, вы можете самостоятельно выбирать плагины для работы с деревом файлов, плагины для поиска или автодополнения, можете управлять методами автодополнения и так далее. А те, кто готов инвестировать время в настройку и оптимизацию рабочего окружения, могут форкать плагины и использовать свои версии. Это очень частые сценарии в экосистеме Vim.
Настройка Vim с нуля — затратный по времени процесс. Да, он принесёт вам огромную пользу в будущем, но не у всех есть возможность тратить столько времени сразу. Из своего опыта скажу, что в 2011 году мне понадобилось три недели, чтобы понять, как работать с Vim, перепробовать кучу плагинов и подходов и так далее. Однако это была хорошая инвестиция, потому что за десять лет работы эти три недели окупились точно.
Правда, за этот долгий период мне время от времени приходилось дорабатывать свою настройку Vim. Так что можно сказать, что потрачено в сумме примерно четыре недели. Конечно, десять лет назад я был студентом и слить три недели на что-то такое я вполне мог. Однако не у каждого есть такой ресурс, поэтому вы можете попробовать готовые сборки под разные языки программирования. Скорее всего, вы очень быстро начнёте их менять под себя — благо в случае с Vim это несложно.
Конфигурация без ограничений помогает специалисту приобрести новый способ мышления и прокачивать свою работу над исходным кодом так, как ему хочется. И вы можете возразить: но ведь большая часть IDE и текстовых редакторов тоже позволяют настраивать практически что угодно. И тут есть большая разница: в крупных IDE гибкость настройки — дополнительная функциональность, а Vim из коробки — чистый лист, и гибкость для него — основной принцип.
Программирование редактирования
Программирование редактирования — это когда разработчик использует свои навыки программирования, чтобы помогать себе писать исходный код. После того как вы перестроите своё мышление, вам захочется ещё сильнее прокачать возможности редактирования кода и текстовых файлов.
Во многих редакторах и IDE есть макросы — быстро создаваемые скрипты. В Vim использовать их очень просто — и они нередко становятся частью стандартного рабочего процесса многих программистов. Макросы позволяют экономить время в геометрической прогрессии, без проблем редактировать файлы со многими тысячами строк кода.
При работе с Vim надо постоянно думать о том, как вы используете этот текстовый редактор. Как только вы чувствуете, что какое-то действие вам делать сложно, останавливайтесь и думайте о том, как вы можете его улучшить, чтобы оно стало более продуктивным.
Это может относиться к способам ввода текста, использования команд или плагинов. Запомните: если вам не нравится какой-то популярный плагин — это нормально. Пользовательский опыт, физиология и привычки людей различаются.
Методология использования Vim состоит в том, что вы постоянно прокачиваетесь. Постоянно! Это часть мышления при работе в Vim.
Ещё один важный момент — свобода в использовании любого языка программирования (правда, надо помнить, что поддержка каждого языка программирования в отдельности в Vim будет, скорее всего, слабее, чем в специализированной IDE). Однако есть серьёзное преимущество — вы можете работать в одной и той же среде с разными языками, если вам это нужно. И хотя это тоже не уникальная фича, это всё же хорошая функциональность.
Урок 2
История текстовых редакторов
Давайте разберёмся, что такое текстовый редактор. Ведь текстовым редактором можно назвать как Vim, так и Microsoft Word. Поэтому я предлагаю в рамках этого курса текстовыми редакторами считать программные продукты, главной сферой применения которых является написание, редактирование, запуск и отладка кода. Vim, безусловно, подходит под это определение.
Чтобы лучше понять Vim, нам нужно изучить весь путь становления текстовых редакторов. Конечно, сейчас выяснить, какой текстовый редактор был первым, очень сложно, потому что тогда не было Twitter, куда можно сразу написать, чтобы рассказать о том, что ты или твоя команда выпустили новый программный продукт. Поэтому пройдёмся только по самым важным вехам в истории.
TECO
Начнём мы с текстового редактора: TECO (Text Editor and COrrector). Он был создан в 1962 году разработчиком Дэном Мёрфи.
Несмотря на то что Дэн Мёрфи в момент создания этого редактора ещё был студентом MIT, он уже мог называться computer scientist, потому что TECO был не просто текстовым редактором, а ещё и интерпретатором для языка программирования TECO. То есть фактически это был программный комплекс для создания программ. Потом его начали использовать уже и как текстовый редактор. К слову, в языке TECO не было синтаксиса в привычном понимании — он работал на макросах. Интерфейс TECO выглядит примерно так:
Лаконично. Просто звёздочка. Тут от пользователя ожидается ввод макросов для работы с редактором. Инструкция по использованию TECO занимает где-то 300 страниц текста.
Почему мы упомянули TECO в этом уроке? Дело в том, что текстовый редактор Emacs изначально создавался именно на TECO. А название Emacs расшифровывается как Editor MACros. В общем, можно считать, что TECO неплохо так повлиял на один из самых важных современных текстовых редакторов.
Для какой операционной системы создавался TECO — вопрос не совсем корректный. В то время программные продукты создавались для конкретных моделей компьютеров. TECO за многие годы существования был портирован на большое количество моделей — и в конце концов его выпустили даже под ОС Unix. Кстати, есть энтузиасты, которые перенесли его на Linux.
QED
Следующий редактор, о котором хочется поговорить, — QED (Quick Editor). Это строковый текстовый редактор, он разработан в 1966 году Батлером Лэмпсоном и Питером Дойчем, а реализован Питером Дойчем и Даной Англуин.
Кстати, позже, в начале семидесятых, именно Лэмпсон, уже работая в компании Xerox, начал разработку компьютера Xerox Alto — первого компьютера с графическим интерфейсом. Это только в начале восьмидесятых Стив Джобс и сотоварищи «позаимствовали» у Xerox идею графического интерфейса. Есть много художественных и документальных фильмов, где рассказана эта история. Зачем вам эта информация? Так этот урок про историю. Тут принято проводить такие параллели.
QED — строковый редактор. Что это значит? Это значит, что вы пишете команды для редактирования текста с помощью любого устройства ввода в терминале. Устройством ввода может выступать клавиатура, файл или любая другая сущность, с которой можно считать текстовую информацию. Но первая реализация QED могла работать только с телетайпом.
Как и в случае с TECO, строковый текстовый редактор QED не имел ни графического, ни псевдографического интерфейса. Строковые текстовые редакторы позволяют заниматься редактированием прямо из терминала. Они обладают набором команд и примитивов, которые используются для того, чтобы редактировать текст из устройства ввода и отправлять его в устройство вывода.
Редактор QED сильно повлиял на первый стандартный редактор операционной системы UNIX под названием ed. Создатель редактора ed Кен Томпсон занимался портированием QED на разные модели компьютеров. В его версии QED была впервые реализована поддержка регулярных выражений. Это очень сильный инструмент для редактирования текста в строковом текстовом редакторе. В итоге ed стал популярен из-за того, что в нём по умолчанию была имплементирована поддержка регулярных выражений.
Текстовый редактор ed был первым потоко-ориентированным текстовым редактором. Я ранее упоминал, что строковые текстовые редакторы сегодня работают именно с потоками данных. И если QED могли работать только с устройствами как источником данных, то ed мог использовать потоки для ввода и вывода.
Текстовый редактор ed был хорош, а вот нормального общения с пользователями в нём не было. Например, в первых версиях пользователь даже не мог понять, успешно ли выполнена программа.
На основе ed в середине семидесятых годов Ли Макмэхон создал новый строковый потоко-ориентированный текстовый редактор. Он назвал его sed — Stream Editor. Stream Editor вобрал в себя все возможности и преимущества ed, стал более отзывчивым для пользователя, а также сильно прокачал внутренний язык для редактирования текста. Sed считается также языком программирования, так как набор примитивов и идиом делал его Тьюринг-полным.
Sed и сегодня используется некоторыми специалистами для решения специфических задач. Я, например, открываю его, если мне нужно сделать набор однообразных или почти однообразных действий для большой коллекции файлов. И вместо того, чтобы писать какой-то скрипт на Ruby или другом известном мне языке программирования, я просто пишу Bash-скрипт, в котором используется sed.
Безусловно, сегодня sed уже совсем не тот, что 50 лет назад, — однако основные принципы и подходы к работе строковых текстовых редакторов до сих пор живы и могут быть полезны современному специалисту.
Псевдографические текстовые редакторы и vi
Мы с вами вплотную подобрались к истории псевдографических текстовых редакторов. Псевдографическим интерфейсом называется интерфейс, который создан из набора псевдографических символов. Символов, отображающих графические примитивы (линий, прямоугольников, треугольников, крестов и так далее). Большинство современных кодировок тоже имеют псевдографические символы. Допустим, в Unicode их 90.
И тут мы постепенно переходим к сладенькому. В 1976 году Билл Джой создал редактор под названием vi. Название vi — это сокращение от visual (визуальный), что как бы сразу намекало на то, что этот редактор обладает графическим интерфейсом. И по меркам того времени это действительно был красивый графический интерфейс (хотя, по сути, он был псевдографическим). Есть и другая версия: акцент на visual был связан с Visual mode (визуальным режимом), который считался большим прорывом. Если кто-то знает лично Билла Джоя, спросите у него :)
Благодаря vi и другим псевдографическим текстовым редакторам того времени, мы с вами сейчас имеем все текстовые редакторы в том виде, в котором они существуют. Но, даже используя псевдографику, создать полноценный набор функций «на одном экране» было очень трудозатратно, да и оперативная память бы не потянула. Чтобы можно было использовать все доступные функции vi, были придуманы и реализованы режимы. Пользователь переключался между ними и в разных режимах использовал свои комбинации клавиш для редактирования текста.
Есть ещё один момент, который повлиял на развитие vi. Билл Джой разрабатывал его с использованием терминала ADM-3A, в котором клавиши Esc и Ctrl располагаются в тех местах, где находятся Tab и Caps Lock на современных клавиатурах. Как можно догадаться, такое расположение клавиш и привело к тому, что сегодня в vi и Vim клавиши Ctrl и Esc играют важнейшую роль.
Кстати, в «Википедии» в англоязычной статье про vi написано, что этот редактор был обожаем всеми хакерами и программистами ровно до момента восхождения Emacs. Ещё там есть комментарий самого Билла Джоя о том, что у Emacs есть такое качество, как модульность. И типа эта идея никогда не приходила ему в голову. В общем, емаксеры пробрались в «Википедию».
Появление Vim
Следующим шагом в развитии vi стал Vim (Vi Improved) — vi улучшенный. Он был разработан Брамом Моленаром. Первый релиз состоялся в 1991 году. Vim распространяется по Vim-лицензии, которая позволяет пользоваться им бесплатно для любых нужд и предлагает делать необязательные пожертвования в фонд детей Уганды. Да, это действительно так. После запуска Vim каждый пользователь сразу видит сообщение: «Help poor children in Uganda».
В самом начале существования Vim обладал следующими отличиями от vi:
- Подсветка синтаксиса. vi поддерживал только один цвет вывода текста. Vim же позволял использовать все доступные в терминале цвета.
- Множественная отмена. Если в vi вы могли отменить только последнюю операцию, то в Vim хранится длинная история действий, доступных для отмены.
- В Vim был интерфейс для создания плагинов. Я не уверен, когда именно он появился, но сам факт наличия такого интерфейса позволил Vim развиваться и стать полноценной IDE для разработки.