В этой статье мы отправимся к истокам текстовых редакторов UNIX, чтобы рассмотреть ключевых участников и важные события, сыгравшие решающую роль в эволюции Vi и Vim, и узнаем, кто их общий «прародитель».
Настоятельно рекомендую установить и попробовать старые строковые редакторы вместе со мной (ссылки приложил). Во-первых, это интересно, а во-вторых, поможет «осознать» материал гораздо лучше.

Эта статья основана на посте Gustavo Pezzi «Understanding the Origins and the Evolution of Vi & Vim». Материал дополнен деталями и уточнениями для более глубокого понимания.
Ed
Начнём нашу историю с Ed — редактора командной строки, который создан легендарным Кеном Томпсоном.
Ed — это так называемый линейный текстовый редактор. В нём редактирование происходит построчно, а не в привычном для нас формате, где весь текст доступен для визуального редактирования. Ведь первоначально редактор разработан для работы с телетайпами, а не с экранными терминалами.
Телетайп — это устройство, напоминающее печатную машинку, но управляемое компьютером. В ранние годы развития компьютерных технологий отсутствовали устройства для отображения информации и их роль выполняли телетайпы. Пользователи вводили команды с клавиатуры, а результаты вычислений автоматически печатались на бумаге.

На мое удивление, редактор ed до сих пор доступен на MacOS и Ubuntu.

Чтобы стало чуть понятнее, как это работает, опишу несколько команд:
-
a
— append: добавление новой строки, -
.
(точка): завершить ввод строки, -
n
— вывести все строки файла с нумерацией, -
w
— write: сохранить файл, -
q
— quit: выход из программы.
Если у вас возник вопрос: «Почему текст приходилось редактировать построчно?» — то в видео автор подробно объясняет, как так сложилось. Если же кратко, то это связано с вопросом: «А как иначе перемещать курсор на пишущей машинке?»
Ed вдохновлён редактором под названием QED (Quick Editor, или «быстрый редактор»). Это тоже линейный текстовый редактор, и он также разработан для работы на телетайпах и использовался в консоли SDS 940. Кен Томпсон переписал QED на языке BCPL (Basic Combined Programming Language) для операционной системы MULTICS, которая впоследствии стала предшественницей UNIX.
Интересный факт: ed стал стандартным редактором строкового режима в UNIX и сохраняет этот статус по сей день. Более того, он остаётся частью стандарта POSIX, обеспечивая совместимость с современными системами.
Теперь перейдём к следующей главе, где уже детище Томпсона послужило источником «вдохновения» для следующего редактора.
Em
Для телетайпов редактирование по одной строке было вполне оправдано. Однако с появлением и ростом популярности видеодисплеев такой подход вызывал неудобства. Среди недовольных оказался и Джордж Кулурис, на то время — доцент Университета Королевы Марии. Он считал команды ed слишком сложными и непонятными для обычных пользователей, или, как он выразился, «смертных».
И после череды разочарований в использовании ed в феврале 1976 года Кулурис решил его усовершенствовать. Взяв за основу оригинальный исходный код детища Томпсона, Кулурис создал редактор em (Ed for Mortals — «Ed для простых смертных»).
«Кстати, "em" означает "редактор для смертных" — я окрестил его так после того, как Кен Томпсон посетил нашу лабораторию в QMC, когда я его разрабатывал, и сказал что-то вроде: "Да, я видел такие редакторы, но не чувствую в них необходимости, я не хочу видеть состояние файла, когда редактирую"».
Источник: George Coulouris: Bits of History
Редактор em был разработан как некая замена ed для работы с дисплейными терминалами.
«Em был просто совместимым обновлением ed, которое позволяло визуально редактировать. в одной строке. Я использовал этот подход отчасти потому, что он мог быть реализовано на любом VDU (путём отправки символа
RETURN
, за которым следует новый версии строки после каждого изменения) и отчасти потому, что я действительно не знал, как сделать полноэкранный редактор!Фактически, его можно было использовать даже на телетайпе, хотя взаимодействие было мучительно медленным».
Источник: George Coulouris: Bits of History
Хотя он оставался построчным редактором, em стала одной из первых программ в UNIX, которая использовала «режим необработанного терминала» (raw terminal mode). В этом режиме обработку всех нажатий клавиш выполняла сама программа, а не драйвер терминального устройства. Таким образом, отдельные символы можно было читать по мере их ввода. Надо сказать, весьма необычная вещь для программы в 1976 году.
Найти редактор em было сложнее. Но всё же удалось найти исходники под современные ОС. Если решите попробовать собрать — вот репозиторий.

А теперь перейдём к главе, где уже детище Джорджа Кулуриса послужило источником вдохновения для нового редактора.
En и Ex
В 1976 году Кен Томпсон посетил Калифорнийский университет в Беркли и привёз с собой сломанный компилятор Pascal для UNIX, который нуждался в доработке. Исправлением этой системы поручили заняться студенту Биллу Джою. В процессе работы Джой всё чаще сталкивался с тем, что ed ограничивает его возможности и замедляет процесс.

Однажды Кулурис продемонстрировал свою разработку местным специалистам, которая была записана на ленту DECtape. Вот так позже Кулурис описывал эту встречу.
«Я объяснил, что "em" — это расширение "ed", которое обеспечивает взаимодействие на уровне нажатия клавиш для редактирования в пределах одной строки, отображая актуальную строку на экране (своего рода однострочный экранный редактор). Я объяснил, что это достигается установкой режима терминала на "raw", чтобы отдельные символы можно было читать по мере их ввода».
Источник: George Coulouris: Bits of History
Но местные специалисты не оценили разработку — они сочли, что такой обновлённый подход к текстовому редактору слишком ресурсоёмкий. Стоит отметить, что компьютеры того времени были огромными по размерам, но крайне слабыми по производительности. К примеру, у вышеупомянутого SDS 940 объём оперативной памяти составлял всего от 72 КБ до 288 КБ.

Однако нашлись те, кто заинтересовался работой Кулуриса. Среди них были Билл Джой и Чак Хейли — аспиранты Калифорнийского университета в Беркли, которые тоже были не в восторге от ed. Вручив копию исходника, Кулурис уехал по делам на неделю, а когда вернулся, то обнаружил, что Билл и Чак создали на основе em новый редактор en. И что интересно, редактор был установлен на сервисных машинах, на которые em ставить не хотели.
Вскоре Билл и Чак расширили возможности редактора, разработав ex.
Если вы хотите попробовать Ex самостоятельно, то для macOS можно установить при помощи пакетного менеджера homebrew. Ex — часть пакета ex-vi. Для установки запустите команду в терминале:
brew install ex-vi

В октябре 1977 года Билл Джой добавил в ex полноэкранный визуальный режим, который получил название vi.
Vi
По сути, Vi и ex — это одна и та же программа с общим кодом. Vi можно рассматривать как запуск ex с дополнительным параметром, который позволяет отображать и редактировать текст на экранном терминале.
То есть Vi — это всего лишь «визуальный» режим редактора ex.

Интересный факт: визуальный режим в vi также назывался open-режимом, что можно перевести как «режим открытого редактирования текста».
Название vi произошло от сокращённой команды visual, используемой для перехода в визуальный режим из редактора ex. Со временем, как многим известно, vi стало не только обозначением этого режима, но и именем исполняемого файла, который можно запустить из оболочки UNIX.
Джой также отмечал, что многие функции vi были вдохновлены Bravo — бимодальным текстовым редактором, разработанным в Xerox PARC для компьютера Xerox Alto. Вот так в интервью для Unix Review за август 1984 года Билл описывал эту историю:
«Многие идеи для режима редактирования экрана были украдены из руководства Bravo, которое я тайком посмотрел и скопировал. Большая часть материала была украдена. Были некоторые вещи, украденные из ed — мы получили страницу руководства для версии ed в Торонто<...> Мы взяли оттуда некоторые расширения регулярных выражений».
Источник: Interview with Bill Joy
Если захотите попробовать редактор Bravo — есть виртуальная машина Xerox Alto в браузере.

Кстати, компания Xerox и её революционные разработки, опередившие своё время, заслуживают отдельной статьи. Но это уже тема для другого разговора.
Также стоит отметить, что Билл Джой разрабатывал vi на терминале ADM-3A. На этом устройстве клавиша Escape находилась в крайнем левом углу клавиатуры — примерно там, где сегодня расположена клавиша Tab. Такое расположение делало работу с Escape более удобной и естественной для пользователей того времени.
Интересный факт: многие современные пользователи vi переназначают почти неиспользуемую клавишу Caps Lock для смены режимов редактора. Это ускоряет работу и делает её удобнее, особенно учитывая частое использование клавиши Escape.

Помимо влияния терминала ADM-3A на сочетания клавиш vi, стоит отметить, что Билл Джой разрабатывал редактор, работая через крайне медленный модем со скоростью всего 300 бод. Это существенно повлияло на его подход к оптимизации работы редактора и его интерфейса.
Заметка: бод — это единица измерения скорости передачи данных в телекоммуникациях, обозначающая количество символов (сигнальных изменений) в секунду. Однако один бод не всегда равен одному биту, поскольку один символ может содержать несколько бит информации в зависимости от используемой модуляции. Но даже с учётом этого, 300 бод — это всё равно очень медленно.
Вот цитата Билла Джоя из интервью о процессе написания ex и vi:
«На это ушло много времени и было сложно, потому что я пытался сделать редактор пригодным для работы через модем на скорости 300 бод. Именно поэтому там есть все эти странные команды. Использовать экранный редактор на таком соединении было практически невозможно — скорости едва хватало. Модем на 1200 бод уже считался достаточно быстрым. Сейчас 1200 бод — это ужасно медленно, а 9600 бод — быстрее, чем вы успеваете читать.
Поэтому редактор пришлось оптимизировать так, чтобы пользователь мог продуктивно редактировать текст даже тогда, когда скорость отображения уступала скорости его мыслей. Теперь, когда компьютеры работают намного быстрее, чем человек успевает думать, никто этого больше не понимает».
Джой также сравнивает разработку vi и Emacs:
«Разработчики Emacs сидели в лабораториях MIT, имея то, что в современных терминах можно назвать высокоскоростным соединением Fibre Channel. Они работали на PDP-10 — огромной по тем временам машине с невероятно быстрыми экранами. И могли позволить себе забавные команды с мерцанием экрана и всевозможными визуальными эффектами. В это время я сидел в доме времён Второй мировой в Беркли с медленным модемом и терминалом, в котором курсор был едва живой».
Билл Джой также сыграл ключевую роль в создании первой версии BSD UNIX в 1978 году, разработанной в Калифорнийском университете в Беркли. В эту версию был включён редактор ex, что значительно способствовало его популярности за пределами университета и укрепило позиции в сообществе UNIX.
Джой так и говорил: значительная часть популярности его редактора vi была связана с доступностью, ведь редактор поставлялся вместе с BSD UNIX. Другие редакторы, такие как Emacs, могли стоить сотни долларов, а vi был бесплатным и доступным для всех пользователей BSD. Выбор был очевиден.
Поскольку большинство пользователей проводили всё время в визуальном режиме ex, Билл Джой решил создать жёсткую ссылку (hard link) с именем vi и добавить её во второй дистрибутив BSD в мае 1979 года.
Клоны Vi
На основе vi было создано множество редакторов-клонов. Их цель заключалась либо в улучшении оригинального редактора за счёт новых функций, либо в переносе интерфейса vi на другие платформы, такие как Atari ST, Amiga, MS-DOS, OS/2 и другие. И, как мы увидим дальше, Vim изначально начинался как один из таких портов.
Stevie
Stevie — клон vi, разработанный для Atari ST.
Тим Томпсон (не родственник Кена Томпсона — просто совпадение) написал оригинальную версию Stevie и опубликовал её исходный код в виде бесплатного ПО в группе новостей comp.sys.atari.st в июне 1987 года. Позже Stevie был портирован на UNIX, OS/2 и Amiga.


Важно отметить, что Stevie был написан с нуля и не использовал исходный код vi. Ведь vi базировался на коде ed, разработанном компанией AT&T, и его использование теоретически требовало наличия лицензии AT&T. Поэтому многие клоны vi предпочитали использовать исходный код Stevie в качестве основы, чтобы избежать судебных тяжб.
Elvis
Разработан в 1990 году Стивом Киркендаллом. Elvis быстро стал одной из самых популярных альтернатив vi, особенно в период, когда оригинальный vi был тесно связан с коммерческими версиями UNIX.

Создатель Elvis задумался о собственном текстовом редакторе после того, как Stevie неожиданно завершил работу с ошибкой. В результате Стив потерял несколько часов работы, что подорвало его доверие к редактору и в конечном итоге подтолкнуло к разработке альтернативы.
В Stevie буфер редактирования хранился в оперативной памяти, что Стив Киркендалл считал непрактичным для работы в MINIX. Одной из главных причин, побудивших его создать собственный клон vi, было желание хранить буфер редактирования не в памяти, а во внешнем файле. Такой подход позволял восстанавливать текст даже после сбоя редактора.
Забавный факт: когда Стива Киркендалла спросили, почему он выбрал название Elvis, то признался, что частично сделал это именно для того, чтобы люди задавали ему этот вопрос. Кроме того, названия клонов vi традиционно содержат буквы «vi», и Elvis не стал исключением.
Elvis стал пионером многих идей, которые позже были внедрены в другие клоны vi. Он получил признание за свою компактность, богатый набор функций и стал первым клоном vi, в котором была подсветка синтаксиса для различных типов файлов. Это сделало Elvis одним из самых популярных редакторов своего времени.
Создатель MINIX Эндрю Таненбаум предложил сообществу выбрать основной текстовый редактор для операционной системы — между Stevie и Elvis. Выбор пал на Elvis, и он остаётся редактором по умолчанию в MINIX по сей день.
Vim
И вот мы наконец добрались до Vim — пожалуй, самого популярного клона vi в истории.
Создатель Vim — Брэм Муленар — начал разработку Vim в 1988 году. И так же, как в историях выше, начал с улучшения того, что есть под рукой, — с редактора Stevie, а точнее, с его версии для Commodore Amiga. Как следствие, изначально Vim создавался именно для Amiga.
«Когда я купил Amiga, я хотел использовать редактор, который я изучал на Unix. Но для Amiga не было хорошего Vi, и я начал с лучшего, что было доступно — со Stevie и начал его улучшать.
Источник: The continuing story of Vim
Первый публичный выпуск Vim (v1.14) состоялся в 1991 году.

Как видно на изображении выше, название Vim расшифровывалось как Vi IMitation («Имитация Vi»), потому что изначальная цель Брэма — воспроизвести поведение Vi. Однако в 1993 году (Vim 1.22) название было переосмыслено и стало означать Vi iMproved («Улучшенный Vi»).
Интересный факт: первая общедоступная копия Vim для Amiga (Vim 1.14) была включена в диск Фреда Фиша №591. Фред Фиш — известный программист, внёсший вклад в разработку GNU GDB, а также создатель серии бесплатных дисков для компьютеров Amiga. Серия Fish Disks выпускалась с 1986 по 1994 год и распространялась по всему миру. Эти диски часто появлялись в компьютерных магазинах и клубах энтузиастов Amiga, отчего программное обеспечение было более доступным для широкой аудитории.
Создание Vim на основе исходного кода Stevie, а не оригинального vi, позволило распространять редактор без ограничений, связанных с лицензией AT&T. Vim выпускается под собственной лицензией (Vim License), которая содержит уникальное условие: она побуждает пользователей делать пожертвования на благотворительность, в частности на помощь детям в Уганде.
Дело в том, что Брэм Муленар был активным сторонником негосударственной организации, базирующейся в Кибаале, Уганда. Он основал её для поддержки детей, чьи родители умерли от СПИДа. В 1994 году Муленар работал волонтёром в Детском центре Кибаале, проектируя системы водоснабжения и канализации. В последующие 25 лет он неоднократно возвращался в Уганду, продолжая свою работу и помогая детям.
Таким образом, Vim — это не только мощный инструмент для работы, но и проект с социальной миссией.

Интерфейс Vim, как и у vi, основан на текстовых командах, вводимых посредством терминала, без использования меню и значков. Хотя Vim поддерживает графический интерфейс (GUI) с меню и панелями инструментов, самым популярным и традиционным остаётся текстовый режим, работающий в командной строке UNIX.
Если решите попробовать Vim с GUI на macOS, то есть MacVim который почти неотличим от терминального образца.
Vim включает режим совместимости с vi, но при его отключении предлагает множество улучшений, недоступных в оригинальном vi. Среди таких улучшений: поддержка Unicode, расширенные регулярные выражения, автодополнение, подсветка синтаксиса (Vim 5.0), многоязычность (Vim 6.0), проверка орфографии (Vim 7.0) и многие другие функции, напоминающие инструменты современных IDE.
Как видите, со временем редактор эволюционировал в мощный инструмент как для программирования, так и для редактирования текста. Из-за его обширных возможностей называть Vim клоном vi сегодня уже не совсем корректно, хотя исторически именно так и было.
Vim сегодня
Vim существует уже больше 30 лет! Но всё это время продолжает активно развиваться и поддерживаться большим сообществом пользователей и разработчиков (в отличие от большинства других клонов vi), регулярно разрабатываются и добавляются новые функции.
На графике ниже показаны некоторые вехи и улучшения Vim с 2004 по 2024 год. Визуализация была создана пользователем mpereira и включает обзор истории разработки Vim, как видно из его репозитория git, созданного в 2004 году.

Активная работа над редактором способствует сохранению популярности Vim как среди новичков, так и среди опытных пользователей. В различных опросах он многократно упоминался как один из самых широко используемых текстовых редакторов или даже как интегрированная среда разработки (IDE). Более того, Vim до сих пор остаётся редактором по умолчанию во многих современных дистрибутивах Linux, что подтверждает его востребованность и универсальность.
Разумеется, возможности Vim можно значительно расширить с помощью множества сторонних плагинов. В сочетании с мощным встроенным языком сценариев VimScript редактор превращается в невероятно продуктивный инструмент для программирования и работы с текстом. Такая гибкость позволяет настроить Vim практически под любые задачи.

Брэм Муленар продолжал работать над развитием Vim вплоть до нескольких недель до своей кончины в 2023 году. Современные компьютеры, такими, какими мы их знаем, во многом обязаны выдающимся людям, как Брэм. Немногие инструменты с открытым исходным кодом могут сравниться с Vim по своему влиянию и легендарному статусу, который он заслуженно занимает в мире программирования.
P.S. Многие задаются извечным вопросом: «Как выйти из Vim?» Лично мне пришлось помучиться не только с этим, но и с тем, как выходить из Ed, Em, Ex, Bravo и Vi. Но со мной все в порядке ;)
Спасибо за внимание!
Автор: Hydrock