Рассказ об истоках и эволюции редакторов Vi и Vim

в 12:35, , рубрики: em, VI, vim, vimscript, графический интерфейс Vim, история Vim, клоны vi, открытый исходный код, строковый редактор, текстовый редактор

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

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

Рассказ об истоках и эволюции редакторов Vi и Vim - 1

Эта статья основана на посте Gustavo Pezzi «Understanding the Origins and the Evolution of Vi & Vim». Материал дополнен деталями и уточнениями для более глубокого понимания.

Ed

Начнём нашу историю с Ed — редактора командной строки, который создан легендарным Кеном Томпсоном.

Ed — это так называемый линейный текстовый редактор. В нём редактирование происходит построчно, а не в привычном для нас формате, где весь текст доступен для визуального редактирования. Ведь первоначально редактор разработан для работы с телетайпами, а не с экранными терминалами.

Телетайп — это устройство, напоминающее печатную машинку, но управляемое компьютером. В ранние годы развития компьютерных технологий отсутствовали устройства для отображения информации и их роль выполняли телетайпы. Пользователи вводили команды с клавиатуры, а результаты вычислений автоматически печатались на бумаге.

Телетайп Lorenz Model 15 Teleprinter

Телетайп Lorenz Model 15 Teleprinter

На мое удивление, редактор 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 было сложнее. Но всё же удалось найти исходники под современные ОС. Если решите попробовать собрать — вот репозиторий.

Пример работы редактора Em. Не намного круче, верно? :)

Пример работы редактора Em. Не намного круче, верно? :)

А теперь перейдём к главе, где уже детище Джорджа Кулуриса послужило источником вдохновения для нового редактора.

En и Ex

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

Калифорнийский университет в Беркли, где Билл Джой был аспирантом, когда разработал vi.

Калифорнийский университет в Беркли, где Билл Джой был аспирантом, когда разработал vi.

Однажды Кулурис продемонстрировал свою разработку местным специалистам, которая была записана на ленту DECtape. Вот так позже Кулурис описывал эту встречу.

«Я объяснил, что "em" — это расширение "ed", которое обеспечивает взаимодействие на уровне нажатия клавиш для редактирования в пределах одной строки, отображая актуальную строку на экране (своего рода однострочный экранный редактор). Я объяснил, что это достигается установкой режима терминала на "raw", чтобы отдельные символы можно было читать по мере их ввода».

Источник: George Coulouris: Bits of History

Но местные специалисты не оценили разработку — они сочли, что такой обновлённый подход к текстовому редактору слишком ресурсоёмкий. Стоит отметить, что компьютеры того времени были огромными по размерам, но крайне слабыми по производительности. К примеру, у вышеупомянутого SDS 940 объём оперативной памяти составлял всего от 72 КБ до 288 КБ.

Билл Джой был аспирантом Калифорнийского университета в Беркли и написал текстовый редактор vi.

Билл Джой был аспирантом Калифорнийского университета в Беркли и написал текстовый редактор vi.

Однако нашлись те, кто заинтересовался работой Кулуриса. Среди них были Билл Джой и Чак Хейли — аспиранты Калифорнийского университета в Беркли, которые тоже были не в восторге от ed. Вручив копию исходника, Кулурис уехал по делам на неделю, а когда вернулся, то обнаружил, что Билл и Чак создали на основе em новый редактор en. И что интересно, редактор был установлен на сервисных машинах, на которые em ставить не хотели.

Вскоре Билл и Чак расширили возможности редактора, разработав ex.

Если вы хотите попробовать Ex самостоятельно, то для macOS можно установить при помощи пакетного менеджера homebrew. Ex — часть пакета ex-vi. Для установки запустите команду в терминале:

brew install ex-vi
Два режима редактора Ex: базовый - похож на Ed и Em, и визуальный - похож на современный vi

Два режима редактора Ex: базовый - похож на Ed и Em, и визуальный - похож на современный vi

В октябре 1977 года Билл Джой добавил в ex полноэкранный визуальный режим, который получил название vi.

Vi

По сути, Vi и ex — это одна и та же программа с общим кодом. Vi можно рассматривать как запуск ex с дополнительным параметром, который позволяет отображать и редактировать текст на экранном терминале.

То есть Vi — это всего лишь «визуальный» режим редактора ex.

Редактор vi может отображать и редактировать текст в полноэкранном режиме.

Редактор vi может отображать и редактировать текст в полноэкранном режиме.

📌 Интересный факт: визуальный режим в 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 в браузере.

Bravo был редактором документов WYSIWYG с возможностью работы с несколькими шрифтами и растровым дисплеем Xerox Alto.

Bravo был редактором документов WYSIWYG с возможностью работы с несколькими шрифтами и растровым дисплеем Xerox Alto.

Кстати, компания Xerox и её революционные разработки, опередившие своё время, заслуживают отдельной статьи. Но это уже тема для другого разговора.

Также стоит отметить, что Билл Джой разрабатывал vi на терминале ADM-3A. На этом устройстве клавиша Escape находилась в крайнем левом углу клавиатуры — примерно там, где сегодня расположена клавиша Tab. Такое расположение делало работу с Escape более удобной и естественной для пользователей того времени.

📌 Интересный факт: многие современные пользователи vi переназначают почти неиспользуемую клавишу Caps Lock для смены режимов редактора. Это ускоряет работу и делает её удобнее, особенно учитывая частое использование клавиши Escape.

Многие сочетания клавиш и клавиши навигации vi, которые мы используем до сих пор, были основаны на раскладке клавиатуры ADM-3A. Обратите внимание - какие классные были промышленные дизайны! Хочу себе такой :)

Многие сочетания клавиш и клавиши навигации vi, которые мы используем до сих пор, были основаны на раскладке клавиатуры ADM-3A. Обратите внимание - какие классные были промышленные дизайны! Хочу себе такой :)

Помимо влияния терминала ADM-3A на сочетания клавиш vi, стоит отметить, что Билл Джой разрабатывал редактор, работая через крайне медленный модем со скоростью всего 300 бод. Это существенно повлияло на его подход к оптимизации работы редактора и его интерфейса.

📌 Заметка: бод — это единица измерения скорости передачи данных в телекоммуникациях, обозначающая количество символов (сигнальных изменений) в секунду. Однако один бод не всегда равен одному биту, поскольку один символ может содержать несколько бит информации в зависимости от используемой модуляции. Но даже с учётом этого, 300 бод — это всё равно очень медленно.

Вот цитата Билла Джоя из интервью о процессе написания ex и vi:

«На это ушло много времени и было сложно, потому что я пытался сделать редактор пригодным для работы через модем на скорости 300 бод. Именно поэтому там есть все эти странные команды. Использовать экранный редактор на таком соединении было практически невозможно — скорости едва хватало. Модем на 1200 бод уже считался достаточно быстрым. Сейчас 1200 бод — это ужасно медленно, а 9600 бод — быстрее, чем вы успеваете читать.

Поэтому редактор пришлось оптимизировать так, чтобы пользователь мог продуктивно редактировать текст даже тогда, когда скорость отображения уступала скорости его мыслей. Теперь, когда компьютеры работают намного быстрее, чем человек успевает думать, никто этого больше не понимает».

Источник: Bill Joy's greatest gift to man — the vi editor

Джой также сравнивает разработку vi и Emacs:

«Разработчики Emacs сидели в лабораториях MIT, имея то, что в современных терминах можно назвать высокоскоростным соединением Fibre Channel. Они работали на PDP-10 — огромной по тем временам машине с невероятно быстрыми экранами. И могли позволить себе забавные команды с мерцанием экрана и всевозможными визуальными эффектами. В это время я сидел в доме времён Второй мировой в Беркли с медленным модемом и терминалом, в котором курсор был едва живой».

Источник: Bill Joy's greatest gift to man — the vi editor

Билл Джой также сыграл ключевую роль в создании первой версии 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, работающий на Atari ST.

Текстовый редактор Stevie, работающий на Atari ST.

Пример его работы:

Рассказ об истоках и эволюции редакторов Vi и Vim - 12

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

Elvis

Разработан в 1990 году Стивом Киркендаллом. Elvis быстро стал одной из самых популярных альтернатив vi, особенно в период, когда оригинальный vi был тесно связан с коммерческими версиями UNIX.

Elvis был одним из первых клонов vi, предлагающих поддержку графического интерфейса и подсветку синтаксиса.

Elvis был одним из первых клонов vi, предлагающих поддержку графического интерфейса и подсветку синтаксиса.

Создатель 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 v1.14, работающий на Commodore Amiga's Workbench.

Vim v1.14, работающий на Commodore Amiga's Workbench.

Как видно на изображении выше, название 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.

Стартовый экран 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 году.

Последние 20 лет разработки Vim из его git-репозитория.

Последние 20 лет разработки Vim из его git-репозитория.

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

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

Vim можно расширить с помощью плагинов, которые практически превратят ваш редактор в программу, подобную IDE.

Vim можно расширить с помощью плагинов, которые практически превратят ваш редактор в программу, подобную IDE.

Брэм Муленар продолжал работать над развитием Vim вплоть до нескольких недель до своей кончины в 2023 году. Современные компьютеры, такими, какими мы их знаем, во многом обязаны выдающимся людям, как Брэм. Немногие инструменты с открытым исходным кодом могут сравниться с Vim по своему влиянию и легендарному статусу, который он заслуженно занимает в мире программирования.

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

Спасибо за внимание!

Автор: Hydrock

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js