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

Недавно я отправился в Лондон посетить альма-матер моей жены, Университет королевы Марии [1]. Остановившись выпить кофе, я прочёл сообщение о том, что Брам Моленар [2], создатель Vim, покинул наш мир.
Честно говоря, при том, что у меня дома растет новый член семейства, и параллельно я ещё записываю новый курс по ассемблеру MIPS для своего обучающего портала [3], мне стало сложно уследить за последними новостями. Поэтому признаюсь, известия о кончине Брама я получил почти с недельным запозданием.
Я не знал Брама лично и далеко не являюсь экспертом по Vim, но тот факт, что тогда я как раз посещал Университет королевы Марии, заставил меня на мгновение приостановиться и поразмышлять о связи этого места с длинной и яркой историей Vim.
Университет королевы Марии сыграл важную роль в истории этого редактора. Именно здесь в 1973 году была установлена первая в Великобритании система UNIX, и здесь же профессор Джордж Кулурис [4] разработал редактор em. Создание em вызвало лавинообразный эффект разработки vi и многих его клонов.

Лондонский университет королевы Марии, где в 1976 году преподавал Джордж Кулурис
Оболочка UNIX невероятно перегружена текстом. Исполняемые файлы вызываются с помощью текста, параметры парсятся через текст, потоки данных перемещаются по системе тоже через текст, и практически всё в этой оболочке выполняется с помощью токенов текста. Не удивительно, что пользователи UNIX столь трепетно относятся к текстовым редакторам.
Здесь, пожалуй, стоит начать с ed, редактора командной строки, созданного Кеном Томпсоном для работы не с видеотерминалами, а с телепринтерами [5].

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

Строковый редактор 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]».
После череды разочарований в использовании ed в феврале 1976 года, находясь на должности лектора в Университете королевы Марии, Кулурис решил доработать этот редактор, взяв за основу исходники кода Кена Томпсона. Так родился em [12] (Ed для смертных).
Em предназначался для работы с видеотерминалами. Это был визуальный редактор для построчной работы, также являвшийся одной из первых программ UNIX, активно использовавшей «режим ввода без обработки», в котором все нажатия клавиш обрабатывались при выполнении программы (а не драйвером устройства терминала).
Но ed расстраивал не только Кулуриса. Недовольство этим редактором проявляло всё больше людей и по другую сторону океана.
В 1976 году Томпсон посетил Калифорнийский университет [13], куда привёз с собой сломанный компилятор Pascal для UNIX, который нужно было исправить. В итоге эта задача была возложена на студента того же университета, Билла Джоя [14]. Однако постепенно Джой заметил, что ed его тормозит.

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

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

Редактор vi способен отрисовывать и редактировать текст в полноэкранном режиме
Код в vi и ex был общий. Можно рассматривать vi как запуск ex с дополнительным параметром, активирующим отрисовку и редактирование текста на видеотерминале компьютера. По факту vi просто является визуальным режимом для ex.
Название «vi» происходит из аббревиатуры команды ex (vi), отвечающей за вход в визуальный режим внутри редактора. Позднее, как большинство из нас знают, vi фактически стал исполняемым именем, которое вызывается из оболочки UNIX.
Джой также отмечал, что в основе многих функциональных возможностей vi лежал редактор Bravo [18]. Bravo был бимодальным текстовым редактором, разработанным в Xerox PARC для Xerox Alto [19].

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

Многие сокращения vi и навигационные клавиши, которые мы используем до сих пор, стали наследием раскладки клавиш на ADM-3A
Помимо того, что используемые в vi сокращения основывались на раскладке ADM-3A, также нужно сказать, что Билл Джой создавал свой редактор, работая через крайне медленный модем со скоростью 300 бодов.
В одном из интервью [21] он прокомментировал процесс написания ex и vi так:
«Это заняло много времени и оказалось реально трудной задачей, поскольку вы должны помнить, что я пытался сделать его пригодным к использованию по модему со скоростью 300 бодов. По той же причине там и появились все эти забавные команды. По модему экранный редактор использовать едва получалось. Скорости не хватало. Потом я сделал апгрейд до 1 200 бодов. Сейчас 1 200 уже весьма медленно. Если передача со скоростью 9 600 бодов опережает скорость нашего чтения, то 1 200 намного медленнее неё. Поэтому я оптимизировал редактор так, чтобы можно было заниматься редактированием и ощущать продуктивность при отрисовке, происходящей медленнее потока . Теперь, когда компьютеры работают намного быстрее, чем человек думает, никто этого уже не понимает».
Джой также сравнил разработку vi и Emacs:
«Люди, создававшие Emacs, трудились в лабораториях MIT, используя оптоволоконное, говоря современным языком, подключение к хосту. Они работали на PDP-10, огромной машине с невероятно быстрыми экранами. Это позволяло им создавать смешные команды, настраивающие мерцание экрана и прочее, в то время, как я сидел дома в Беркли, в жилье, напоминавшем пережитки Второй мировой войны, используя модем и терминал, на котором курсор едва отрывался от нижней строки. Сегодня этот мир уже вымер».
В 1978 году Билл Джой также занимался в Калифорнийском университете созданием первой версии ОС BSD [23], основанной на исходном коде UNIX, куда входил редактор ex. Это помогло увеличить популярность его редактора за пределами университета.
Большинство пользователей проводили всё своё время в визуальном режиме ex, поэтому Билл решил создать жёсткую ссылку, называемую vi, которую добавил во второй дистрибутив BSD в мае 1979 года.
Джой также утверждает, что основной причиной роста популярности vi стал тот факт, что он был доступен и включён в BSD в то время, как другие редакторы вроде Emacs могли стоить сотни долларов.
На основе vi было создано немало клонов. Идея состояла в том, чтобы либо улучшить исходный редактор, расширив его функциональность, либо портировать его на другие платформы (Atari ST, Amiga, MS-DOS, OS/2 и так далее). Один из таких портов и стал в последствии редактором Vim [24], который разработал Моленар.
Stevie [25] (ST Editor для энтузиастов VI) был клоном vi для Atari ST [26].
Тим Томпсон написал первую версию Stevie и разместил его исходный код в виде бесплатного ПО в новостной группе comp.sys.atari.st [27] в июне 1987 года. Позднее Stevie также портировали на UNIX, OS/2 и Amiga.

Редактор Stevie на Atari ST
Одной важнейшей деталью Stevie было то, что он писался с нуля без использования исходного кода vi. Код vi был основан на коде ed, который разрабатывался в AT&T. Теоретически это означало, что vi может быть использован только обладателями лицензии AT&T. Именно поэтому многие клоны vi также предпочли использовать исходный код Stevie, а не vi.
Elvis [28] – этот редактор занимает в моём сердце особое место, поскольку он был первым клоном vi, который я использовал профессионально. Какое-то время я жил на юге Бразилии, когда как раз получил свою первую должность программиста.

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

Elvis был одним из первых клонов vi, в котором появилась поддержка GUI и выделение синтаксиса
Создатель Elvis, Стив Киркендалл, начал подумывать о написании собственного редактора, после того как его подвёл Stevie, из-за которого он потерял много часов усердного труда.
Stevie хранил буфер редактирования в RAM, что, по мнению Киркендалла, в операционной системе MINIX [33] было непрактичным решением. Одним из основных мотивов Стива к написанию собственного клона vi стало желание, чтобы новый редактор хранил буфер редактирования в файле, а не в RAM. Благодаря этому, даже если редактор давал сбой, редактируемый текст всё равно можно было извлечь из этого файла.
Интересный факт: когда Киркендалла спрашивали: «Почему Elvis?», он говорил, что отчасти он выбрал это имя, чтобы в последствии его спрашивали, почему он выбрал именно его. Кроме того, клоны vi, как правило, содержат в своём названии буквы vi.
В Elvis впервые появились многие идеи, которые были адаптированы в более поздних клонах. Этот редактор любили за его лаконичность и богатую функциональность. Вдобавок к этому, он был первым редактором, в котором появилось выделение синтаксиса и обобщение выделения синтаксиса на несколько типов файлов.
Создатель MINIX, Эндрю Таненбаум [34], обратился к сообществу с просьбой выбрать для их первой операционной системы в качестве основного редактора Stevie или Elvis. Выбор пал на Elvis, и он по сей день остаётся базовым редактором этой ОС.
И вот мы подобрались к Vim [24]. Это, пожалуй, самый популярный клон vi за всю историю. Он развился в невероятно мощную программу с активным сообществом, которое продолжает расширяться. Сейчас его уже сложно назвать клоном vi, но именно в качестве него он начинал.
Вдохновлённый предыдущим портом Stevie для Commodore Amiga [35], Брам Моленар начал работать над 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 [36]. Фред Фиш был программистом, известным своей работой над GDB [37] для GNU, а также выпуском серии дисков с бесплатным ПО для Amiga. Серия Fish Disks [38] продолжала выходить с 1986 по 1994 годы. Фиш распространял свои диски по миру через компьютерные магазины и клубы энтузиастов Amiga.
Использование в качестве основы Vim исходного кода Stevie, а не vi, означало, что программу можно будет распространять без необходимости получать лицензию на исходный код AT&T. Vim выпускается под лицензией Vim [39], которая сопровождается обращением, призывающим пользователей сделать пожертвование на нужды детей в Уганде.

Экран запуска Vim
Моленар являлся правозащитником в неправительственной организации в Кибаале, Уганда, которую основал с целью поддержки детей, чьи родители умерли от СПИДа. В 1994 году он выступил добровольцем на должность инженера по водоснабжению и канализации в детском центре Кибаалы и в течение последующих двадцати пяти лет неоднократно туда возвращался.
Интерфейс Vim, как и в vi, основан не на меню или иконках, а на командах, отдаваемых через текстовый интерфейс. В Vim также есть режим GUI, позволяющий использовать меню и панели инструментов, но самым популярным его режимом по-прежнему является текстовый UI в командной строке UNIX.
В Vim есть режим совместимости, но когда он не используется, у редактора есть множество преимуществ в сравнении с vi. Некоторые из них – поддержка символов Unicode, регулярные выражения, автодополнение, выделение синтаксиса и многие другие небольшие IDE-подобные функции.
В отличие от других клонов vi, Vim по-прежнему находится в активной разработке, будучи окружён обширным сообществом пользователей и разработчиков. Для него продолжают создавать новую функциональность, делая всё более эффективным.
Кроме того, естественно, собственную функциональность Vim можно расширить одним из множества сторонних плагинов. В комбинации с мощным кастомным скриптовым языком, VimScript [40], этот редактор можно превратить в невероятно продуктивный инструмент программирования.
Я решил не упоминать какие-либо плагины Vim и не перечислять в этой статье различные его конфигурации, поскольку это не было её изначальной целью. Если вы посмотрите какую-нибудь из моих лекций [3], то увидите, что я использую Vim, но совсем без излишеств. Помимо внесения некоторых косметических изменений, я добавил единственный плагин под названием YouCompleteMe [41]. Но я уверен, что для улучшения вашего Vim есть и более качественные ресурсы.

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

Последние 20 лет разработки Vim [42] с позиции репозитория GIT
Созданный Брамом Моленаром редактор является легендой среди разработчиков. В некоторых опросах он неоднократно назывался одним из самых используемых редакторов или IDE и по-прежнему является базовым во многих современных дистрибутивах Linux.
Моленар прекратил обновлять Vim лишь за несколько недель до своей кончины. Вычислительный мир, каким мы его знаем сегодня, в значительной степени развивался усилиями людей, подобных Браму, и лишь немногие инструменты с открытым исходным кодом заслужили такого признания, как Vim.
Оглядываясь назад и размышляя об истории этих редакторов, мы испытываем чувство восторга, ведь они сыграли непосредственную роль в развитии компьютерных наук.
Находясь здесь, в здании Университета королевы Марии, где эти события происходили почти 50 лет назад, и используя Vim для написания этой статьи, я получаю невероятные впечатления. Глядя на мигающий курсор текста, я преисполняюсь тёплыми чувствами, очень схожими с ощущениями, которые возникают, когда я смотрю на океан или какое-нибудь столетнее дерево. Такое созерцание подталкивает нас к размышлению о времени, которое было до нас, и событиях, которые способствовали формированию знакомого нам современного мира.
Кстати, Emacs отстой!
Автор: Дмитрий Брайт
Источник [45]
Сайт-источник 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] Источник: https://habr.com/ru/companies/ruvds/articles/762286/?utm_source=habrahabr&utm_medium=rss&utm_campaign=762286
Нажмите здесь для печати.