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

Недавно я отправился в Лондон посетить альма-матер моей жены, Университет королевы Марии. Остановившись выпить кофе, я прочёл сообщение о том, что Брам Моленар, создатель Vim, покинул наш мир.

Честно говоря, при том, что у меня дома растет новый член семейства, и параллельно я ещё записываю новый курс по ассемблеру MIPS для своего обучающего портала, мне стало сложно уследить за последними новостями. Поэтому признаюсь, известия о кончине Брама я получил почти с недельным запозданием.

Я не знал Брама лично и далеко не являюсь экспертом по Vim, но тот факт, что тогда я как раз посещал Университет королевы Марии, заставил меня на мгновение приостановиться и поразмышлять о связи этого места с длинной и яркой историей Vim.

Университет королевы Марии сыграл важную роль в истории этого редактора. Именно здесь в 1973 году была установлена первая в Великобритании система UNIX, и здесь же профессор Джордж Кулурис разработал редактор em. Создание em вызвало лавинообразный эффект разработки vi и многих его клонов.


Лондонский университет королевы Марии, где в 1976 году преподавал Джордж Кулурис

Ed


Оболочка UNIX невероятно перегружена текстом. Исполняемые файлы вызываются с помощью текста, параметры парсятся через текст, потоки данных перемещаются по системе тоже через текст, и практически всё в этой оболочке выполняется с помощью токенов текста. Не удивительно, что пользователи UNIX столь трепетно относятся к текстовым редакторам.

Здесь, пожалуй, стоит начать с ed, редактора командной строки, созданного Кеном Томпсоном для работы не с видеотерминалами, а с телепринтерами.


Teletype Model 15

Ed относится к так называемым строчным редакторам. Редактирование строк по одной идеально подходило для телепринтеров, но с ростом популярности видеодисплеев большинству пользователей работа с ed начала надоедать. К этим пользователям также относился Джордж Кулурис, который считал команды ed загадочными и не подходящими для «простых смертных».


Строковый редактор Ed

На создание ed Томпсона вдохновил другой редактор, QED (quick editor, быстрый редактор). QED также был ориентирован на построчную обработку в телепринтерах, разработанных для консоли SDS 940. Кен Томпсон переписал этот редактор, используя BCPL для выполнения MULTICS (предшественницы UNIX).

Интересный факт: Ed стал строчным редактором для UNIX и остаётся частью стандарта POSIX по сей день. В конце концов, «Ed is the standard text editor».

Em


После череды разочарований в использовании ed в феврале 1976 года, находясь на должности лектора в Университете королевы Марии, Кулурис решил доработать этот редактор, взяв за основу исходники кода Кена Томпсона. Так родился em (Ed для смертных).

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

Но ed расстраивал не только Кулуриса. Недовольство этим редактором проявляло всё больше людей и по другую сторону океана.

Vi


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


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

Летом 1976 года, когда Кулурис приехал в Калифорнийский университет, он привёз с собой DECtape с em и показал его разным специалистам. Некоторые сочли этот новый вид текстового редактора пожирателем ресурсов в то время, как других, включая Билла Джоя, программа Кулуриса впечатлила.


Билл Джой

Вдохновлённый редактором em и собственными доработками редактора ed, Билл Джой и Чак Хейли (оба выпускники университета) создали новый редактор, который назвали en. Вскоре после этого они «расширили» его, разработав ex. В октябре 1977 года Билл Джой добавил в ex полноэкранный режим, и ex превратился в vi.


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

Код в vi и ex был общий. Можно рассматривать vi как запуск ex с дополнительным параметром, активирующим отрисовку и редактирование текста на видеотерминале компьютера. По факту vi просто является визуальным режимом для ex.

Название «vi» происходит из аббревиатуры команды ex (vi), отвечающей за вход в визуальный режим внутри редактора. Позднее, как большинство из нас знают, vi фактически стал исполняемым именем, которое вызывается из оболочки UNIX.

Джой также отмечал, что в основе многих функциональных возможностей vi лежал редактор Bravo. Bravo был бимодальным текстовым редактором, разработанным в Xerox PARC для Xerox Alto.


Bravo был WYSWYG-редактором документов, способным использовать множество шрифтов и оснащённым растровым экраном Xerox Alto

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


Многие сокращения vi и навигационные клавиши, которые мы используем до сих пор, стали наследием раскладки клавиш на ADM-3A

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

В одном из интервью он прокомментировал процесс написания ex и vi так:

«Это заняло много времени и оказалось реально трудной задачей, поскольку вы должны помнить, что я пытался сделать его пригодным к использованию по модему со скоростью 300 бодов. По той же причине там и появились все эти забавные команды. По модему экранный редактор использовать едва получалось. Скорости не хватало. Потом я сделал апгрейд до 1 200 бодов. Сейчас 1 200 уже весьма медленно. Если передача со скоростью 9 600 бодов опережает скорость нашего чтения, то 1 200 намного медленнее неё. Поэтому я оптимизировал редактор так, чтобы можно было заниматься редактированием и ощущать продуктивность при отрисовке, происходящей медленнее потока мышления. Теперь, когда компьютеры работают намного быстрее, чем человек думает, никто этого уже не понимает».

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

«Люди, создававшие Emacs, трудились в лабораториях MIT, используя оптоволоконное, говоря современным языком, подключение к хосту. Они работали на PDP-10, огромной машине с невероятно быстрыми экранами. Это позволяло им создавать смешные команды, настраивающие мерцание экрана и прочее, в то время, как я сидел дома в Беркли, в жилье, напоминавшем пережитки Второй мировой войны, используя модем и терминал, на котором курсор едва отрывался от нижней строки. Сегодня этот мир уже вымер».

В 1978 году Билл Джой также занимался в Калифорнийском университете созданием первой версии ОС BSD, основанной на исходном коде UNIX, куда входил редактор ex. Это помогло увеличить популярность его редактора за пределами университета.

Большинство пользователей проводили всё своё время в визуальном режиме ex, поэтому Билл решил создать жёсткую ссылку, называемую vi, которую добавил во второй дистрибутив BSD в мае 1979 года.

Джой также утверждает, что основной причиной роста популярности vi стал тот факт, что он был доступен и включён в BSD в то время, как другие редакторы вроде Emacs могли стоить сотни долларов.

Клоны Vi


На основе vi было создано немало клонов. Идея состояла в том, чтобы либо улучшить исходный редактор, расширив его функциональность, либо портировать его на другие платформы (Atari ST, Amiga, MS-DOS, OS/2 и так далее). Один из таких портов и стал в последствии редактором Vim, который разработал Моленар.

▍ Stevie


Stevie (ST Editor для энтузиастов VI) был клоном vi для Atari ST.

Тим Томпсон написал первую версию Stevie и разместил его исходный код в виде бесплатного ПО в новостной группе comp.sys.atari.st в июне 1987 года. Позднее Stevie также портировали на UNIX, OS/2 и Amiga.


Редактор Stevie на Atari ST

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

▍ Elvis


Elvis – этот редактор занимает в моём сердце особое место, поскольку он был первым клоном vi, который я использовал профессионально. Какое-то время я жил на юге Бразилии, когда как раз получил свою первую должность программиста.


Именно с помощью Elvis я впервые познакомился со всеми возможностями vi. Мы использовали его в далёких 90-х для редактирования исходного кода MUMPS и ZIM под запуск на серверах с HP-UX и Solaris. Моей первой работой было портирование старой базы данных MUMPS для использования этого блестящего языка в 4-м поколении, называемого ZIM (сегодня уже не существует).

Серверы многих наших клиентов располагались в удалённых сельских районах страны, что означало крайне медленное и непостоянное подключение к интернету. Если вам доводилось подключаться и редактировать текст на сервере, где отображение вашего ввода на экране занимает долгие секунды, то вы поймёте, что имел ввиду Билл Джой, когда говорил о забавных командах vi, которые зачастую вызывались односимвольными инструкциями.


Elvis был одним из первых клонов vi, в котором появилась поддержка GUI и выделение синтаксиса

Создатель Elvis, Стив Киркендалл, начал подумывать о написании собственного редактора, после того как его подвёл Stevie, из-за которого он потерял много часов усердного труда.

Stevie хранил буфер редактирования в RAM, что, по мнению Киркендалла, в операционной системе MINIX было непрактичным решением. Одним из основных мотивов Стива к написанию собственного клона vi стало желание, чтобы новый редактор хранил буфер редактирования в файле, а не в RAM. Благодаря этому, даже если редактор давал сбой, редактируемый текст всё равно можно было извлечь из этого файла.

Интересный факт: когда Киркендалла спрашивали: «Почему Elvis?», он говорил, что отчасти он выбрал это имя, чтобы в последствии его спрашивали, почему он выбрал именно его. Кроме того, клоны vi, как правило, содержат в своём названии буквы vi.

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

Создатель MINIX, Эндрю Таненбаум, обратился к сообществу с просьбой выбрать для их первой операционной системы в качестве основного редактора Stevie или Elvis. Выбор пал на Elvis, и он по сей день остаётся базовым редактором этой ОС.

Vim


И вот мы подобрались к Vim. Это, пожалуй, самый популярный клон vi за всю историю. Он развился в невероятно мощную программу с активным сообществом, которое продолжает расширяться. Сейчас его уже сложно назвать клоном vi, но именно в качестве него он начинал.

Вдохновлённый предыдущим портом Stevie для Commodore Amiga, Брам Моленар начал работать над Vim для Amiga в 1988 году.

Да, так и есть… Изначально Vim создавался для Commodore Amiga. Меня всегда удивляет тот факт, что это известно не всем программистам, включая тех, кто использует Vim постоянно.

Первый публичный релиз Vim (v. 1.14) состоялся в 1991 году.


Vim v1.14 в рабочем пространстве Commodore Amiga

Как видно на картинке выше, имя Vim – это акроним для Vi IMitation. В 1993 году оно было изменено на Vi iMproved.

Интересный факт: публичная копия Vim для Amiga была включена в диск Фреда Фиша #591. Фред Фиш был программистом, известным своей работой над GDB для GNU, а также выпуском серии дисков с бесплатным ПО для Amiga. Серия Fish Disks продолжала выходить с 1986 по 1994 годы. Фиш распространял свои диски по миру через компьютерные магазины и клубы энтузиастов Amiga.

Использование в качестве основы Vim исходного кода Stevie, а не vi, означало, что программу можно будет распространять без необходимости получать лицензию на исходный код AT&T. Vim выпускается под лицензией Vim, которая сопровождается обращением, призывающим пользователей сделать пожертвование на нужды детей в Уганде.


Экран запуска Vim

Моленар являлся правозащитником в неправительственной организации в Кибаале, Уганда, которую основал с целью поддержки детей, чьи родители умерли от СПИДа. В 1994 году он выступил добровольцем на должность инженера по водоснабжению и канализации в детском центре Кибаалы и в течение последующих двадцати пяти лет неоднократно туда возвращался.

Интерфейс Vim, как и в vi, основан не на меню или иконках, а на командах, отдаваемых через текстовый интерфейс. В Vim также есть режим GUI, позволяющий использовать меню и панели инструментов, но самым популярным его режимом по-прежнему является текстовый UI в командной строке UNIX.

В Vim есть режим совместимости, но когда он не используется, у редактора есть множество преимуществ в сравнении с vi. Некоторые из них – поддержка символов Unicode, регулярные выражения, автодополнение, выделение синтаксиса и многие другие небольшие IDE-подобные функции.

▍ Vim сегодня


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

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

Я решил не упоминать какие-либо плагины Vim и не перечислять в этой статье различные его конфигурации, поскольку это не было её изначальной целью. Если вы посмотрите какую-нибудь из моих лекций, то увидите, что я использую Vim, но совсем без излишеств. Помимо внесения некоторых косметических изменений, я добавил единственный плагин под названием YouCompleteMe. Но я уверен, что для улучшения вашего Vim есть и более качественные ресурсы.


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

Важные моменты в начале истории разработки Vim:

  • 1988: (Vim 1.0) Разработка Vi IMitation на Amiga;
  • 1991: (Vim 1.14) Первый публичный релиз на диске Фреда Фиша #591;
  • 1993: (Vim 1.22) Порт на UNIX и переименование в Vi Improved;
  • 1994: (Vim 3.0) Появление нескольких окон;
  • 1996: (Vim 4.0) Появление графического пользовательского интерфейса;
  • 1998: (Vim 5.0) Появление выделения синтаксиса;
  • 2001: (Vim 6.0) Появление сворачивания и многоязычности;
  • 2006: (Vim 7.0) Появление проверки правописания и поддержки вкладок.

Сегодня Vim уже более 30 лет. На графике ниже показаны некоторые значимые этапы его жизни и улучшения за последние 20 лет. Построил этот график @mpereira. Он отражает историю разработки Vim с позиции репозитория GIT, созданного в 2004 году.


Последние 20 лет разработки Vim с позиции репозитория GIT

Созданный Брамом Моленаром редактор является легендой среди разработчиков. В некоторых опросах он неоднократно назывался одним из самых используемых редакторов или IDE и по-прежнему является базовым во многих современных дистрибутивах Linux.

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

Оглядываясь назад и размышляя об истории этих редакторов, мы испытываем чувство восторга, ведь они сыграли непосредственную роль в развитии компьютерных наук.

Находясь здесь, в здании Университета королевы Марии, где эти события происходили почти 50 лет назад, и используя Vim для написания этой статьи, я получаю невероятные впечатления. Глядя на мигающий курсор текста, я преисполняюсь тёплыми чувствами, очень схожими с ощущениями, которые возникают, когда я смотрю на океан или какое-нибудь столетнее дерево. Такое созерцание подталкивает нас к размышлению о времени, которое было до нас, и событиях, которые способствовали формированию знакомого нам современного мира.

Кстати, Emacs отстой!

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх ????️

Комментарии (17)


  1. saipr
    24.09.2023 11:54
    +15

    Читая эту статью


    , я преисполняюсь тёплыми чувствами, очень схожими с ощущениями, которые возникают, когда я смотрю на океан или какое-нибудь столетнее дерево.

    Такое созерцание подтолкнуло меня к воспоминаниям о событиях почти 40-леьней давности, о событиях второй половины 80-х годов прошлого столетия, о том как мы осваивали и внедряли Юникс-системы в нашей стране.
    Редактора vim тогда ещё не было. В качестве тестового редактора мы использовали редактор ned, который был неотъемлемой частью операционной системы МОС ЕС класса Unix. Я тогда вел рубрику "Инженер и компьютер" и одном их номеров напечатал статью "Подготовка и редактирование текстов":
    image


    А в начале 90-х vim начал чвое победное шествие.


  1. jerann
    24.09.2023 11:54

    Что же будет с Vimом в перспективе?


    1. VladimirVs
      24.09.2023 11:54
      +1

      Перспективы очень благоприятные. Сообщество разработчиков объявило о продолжении развития проекта Vim после ухода из жизни Брама Моленара см. - [Хабр, 2023-08-14](https://habr.com/ru/news/754386/)


      1. klvov
        24.09.2023 11:54

        Мооленар больше не с нами... что ж, почту стоя минутой молчания...

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


  1. Pitkin_zadov
    24.09.2023 11:54

    Я вот так и не понял, для выхода нужно набрать 2 символа (:q) или один (q). :)
    Как ни пытался ни то ни то не работает :) А самое главное, как тогда эти символы вводить в тексте если после их ввода редактор закроется :)))


    1. Morthan
      24.09.2023 11:54
      +4

      Если уж совсем обобщённо, то набрать нужно такую последовательность:

      • ESC — выход в нормальный режим

      • : — переход в режим ввода команд

      • q — команда выхода

      • ENTER — выполнить команду.

      Вводить эти символы в тексте можно без проблем, поскольку вводятся они в режиме редактирования, а не ввода команд.


      1. Deosis
        24.09.2023 11:54

        После q надо ещё ! поставить, или w перед, иначе вим откажется выходить.


        1. ironlion
          24.09.2023 11:54
          +4

          Откажется, если текст изменён. :wq - выход с сохранением, :q! - без сохранения


          1. andy_p
            24.09.2023 11:54
            +1

            :x


          1. bevice
            24.09.2023 11:54

            Или ZZ или ZQ, но тсс! Это страшная тайна


  1. HiroProtagonist
    24.09.2023 11:54
    +2

    Может всё же телетайп? Даже перейдя по гиперссылке на страницу в Википедии, можно обнаружить правильное название переключившись на русский язык.


    1. Bright_Translate Автор
      24.09.2023 11:54
      +1

      Как я понял, это просто более распространенный вариант. К примеру, в Чип и Дип вполне используют термин телепринтер. https://www.chipdip.ru/video/id000286472


      1. funca
        24.09.2023 11:54
        +1

        Teletype это корпорация, одно из подразделений которой занималось производством таких устройств. Название бренда стало нарицательным (как "Xerox" для копировальных аппаратов, или "Spam" для навязчивой рекламы).


      1. dkirienko
        24.09.2023 11:54
        +1

        "Код АСЦ-два" в конце этого видео - это ASCII что ли? Ну такой себе уровень источника...


  1. DmitryKoterov
    24.09.2023 11:54
    +2

    Как же так, пост про vim, а в комментах до сих пор нет шутки про то, как люди становятся ярыми адептами vim: они просто не могут из него выйти. :)


    1. truthseeker
      24.09.2023 11:54

      Не, не смешно. Esc + q вам в помощь(или qv, или q!, если хотите выйти быстро с сохранением/без сохранения)...


      1. truthseeker
        24.09.2023 11:54

        qw, конечно, очепятки такие очепятки...