- PVSM.RU - https://www.pvsm.ru -

Зарождение и эволюция редакторов Vi и Vim

Зарождение и эволюция редакторов Vi и Vim - 1


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

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

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

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

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

Зарождение и эволюция редакторов Vi и Vim - 2
Лондонский университет королевы Марии, где в 1976 году преподавал Джордж Кулурис

Ed

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

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

Зарождение и эволюция редакторов Vi и Vim - 3
Teletype Model 15

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

Зарождение и эволюция редакторов Vi и Vim - 4
Строковый редактор Ed

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

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

Em

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

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

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

Vi

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

Зарождение и эволюция редакторов Vi и Vim - 5
Калифорнийский университет, где Билл Джой был студентом выпускного курса, когда разработал vi

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

Зарождение и эволюция редакторов Vi и Vim - 6
Билл Джой

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

Зарождение и эволюция редакторов Vi и Vim - 7
Редактор vi способен отрисовывать и редактировать текст в полноэкранном режиме

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Клоны Vi

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

▍ Stevie

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

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

Зарождение и эволюция редакторов Vi и Vim - 10
Редактор Stevie на Atari ST

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

▍ Elvis

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

Зарождение и эволюция редакторов Vi и Vim - 11

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

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

Зарождение и эволюция редакторов Vi и Vim - 12
Elvis был одним из первых клонов vi, в котором появилась поддержка GUI и выделение синтаксиса

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

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

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

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

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

Vim

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

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

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

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

Зарождение и эволюция редакторов Vi и Vim - 13
Vim v1.14 в рабочем пространстве Commodore Amiga

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

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

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

Зарождение и эволюция редакторов Vi и Vim - 14
Экран запуска Vim

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

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

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

▍ Vim сегодня

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

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

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

Зарождение и эволюция редакторов Vi и Vim - 15
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 лет. На графике ниже [42] показаны некоторые значимые этапы его жизни и улучшения за последние 20 лет. Построил этот график @mpereira [43]. Он отражает историю разработки Vim с позиции репозитория GIT [44], созданного в 2004 году.

Зарождение и эволюция редакторов Vi и Vim - 16
Последние 20 лет разработки Vim [42] с позиции репозитория GIT

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

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

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

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

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

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

Автор: Дмитрий Брайт

Источник [46]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/vim/387261

Ссылки в тексте:

[1] Университет королевы Марии: https://www.qmul.ac.uk/

[2] Брам Моленар: https://moolenaar.net/

[3] обучающего портала: https://pikuma.com/courses

[4] Джордж Кулурис: https://en.wikipedia.org/wiki/George_Coulouris_(computer_scientist)%22

[5] телепринтерами: https://en.wikipedia.org/wiki/Teleprinter

[6] QED: https://en.wikipedia.org/wiki/QED_(text_editor)

[7] консоли SDS 940: https://www.computerhistory.org/revolution/mainframe-computers/7/181/730

[8] BCPL: https://en.wikipedia.org/wiki/BCPL

[9] MULTICS: https://en.wikipedia.org/wiki/Multics

[10] POSIX: https://en.wikipedia.org/wiki/POSIX

[11] Ed is the standard text editor: https://cs.wellesley.edu/~cs249/Resources/ed_is_the_standard_text_editor.html

[12] em: https://github.com/rsdoiel/em-1.0.0

[13] Калифорнийский университет: https://www.berkeley.edu/

[14] Билла Джоя: https://en.wikipedia.org/wiki/Bill_Joy

[15] DECtape: https://en.wikipedia.org/wiki/DECtape

[16] ex: https://en.wikipedia.org/wiki/Ex_(text_editor)

[17] vi: https://en.wikipedia.org/wiki/Vi

[18] Bravo: https://en.wikipedia.org/wiki/Bravo_(editor)

[19] Xerox Alto: https://en.wikipedia.org/wiki/Xerox_Alto

[20] ADM-3A: https://en.wikipedia.org/wiki/ADM-3A

[21] интервью: https://www.theregister.com/2003/09/11/bill_joys_greatest_gift/

[22] мышления: http://www.braintools.ru

[23] BSD: https://en.wikipedia.org/wiki/Berkeley_Software_Distribution

[24] Vim: https://en.wikipedia.org/wiki/Vim_(text_editor)

[25] Stevie: https://en.wikipedia.org/wiki/Stevie_(text_editor)

[26] Atari ST: https://en.wikipedia.org/wiki/Atari_ST

[27] comp.sys.atari.st: https://groups.google.com/g/comp.sys.atari.st?pli=1

[28] Elvis: https://en.wikipedia.org/wiki/Elvis_(text_editor)

[29] MUMPS: https://en.wikipedia.org/wiki/MUMPS

[30] ZIM: https://zimdatabases.com/

[31] HP-UX: https://en.wikipedia.org/wiki/HP-UX

[32] Solaris: https://encyclopedia.pub/entry/29890

[33] MINIX: https://en.wikipedia.org/wiki/Minix

[34] Эндрю Таненбаум: https://en.wikipedia.org/wiki/Andrew_S._Tanenbaum

[35] Commodore Amiga: https://en.wikipedia.org/wiki/Amiga

[36] диск Фреда Фиша #591: http://ftp.funet.fi/pub/amiga/fish/501-600/ff591/

[37] GDB: https://www.sourceware.org/gdb/

[38] Fish Disks: http://ftp.funet.fi/pub/amiga/fish/

[39] лицензией Vim: https://www.gnu.org/licenses/vim-license.txt

[40] VimScript: https://learnvimscriptthehardway.stevelosh.com/

[41] YouCompleteMe: http://ycm-core.github.io/YouCompleteMe/

[42] графике ниже: https://www.contextualize.ai/mpereira/20-years-of-vim-ef9acae9

[43] @mpereira: https://twitter.com/mpereira

[44] репозитория GIT: https://github.com/vim/

[45] Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх 🕹️: https://t.me/ruvds_community

[46] Источник: https://habr.com/ru/companies/ruvds/articles/762286/?utm_source=habrahabr&utm_medium=rss&utm_campaign=762286