Война редакторов - это соперничество между пользователями текстовых редакторов Emacs и vi (теперь обычно Vim , а в последнее время - Neovim ) . Соперничество стало неотъемлемой частью хакерской культуры и сообщества свободного программного обеспечения .
Дебаты о Emacs и vi были одной из первых «священных войн», проводимых группами Usenet [1], когда много пламенных войн велось между теми, кто настаивал на том, что выбранный ими редактор является образцом совершенства редактирования, и оскорбляя других, поскольку 1985. [2] Связанные битвы велись за операционные системы , языки программирования , системы контроля версий и даже стиль отступа исходного кода . [3] [4]
Сравнение
Наиболее важные исторические [примечания 1] различия между vi и Emacs представлены в следующей таблице:
Характерная черта | Emacs | vi |
---|---|---|
Выполнение нажатия клавиши | Традиционно [примечания 1] команды Emacs представляют собой комбинации клавиш, для которых клавиши-модификаторы удерживаются нажатыми, в то время как другие клавиши нажимаются; команда выполняется после полного набора. Это по-прежнему формирует дерево решений из команд, но не из отдельных нажатий клавиш. | vi сохраняет каждую перестановку типизированных ключей. Это создает путь в дереве решений, который однозначно идентифицирует любую команду. |
Использование памяти и возможность настройки | Emacs выполняет множество действий при запуске, многие из которых могут выполнять произвольный пользовательский код. [5] Из-за этого Emacs запускается дольше (даже по сравнению с vim) и требует больше памяти . Однако он обладает широкими возможностями настройки и включает в себя большое количество функций, поскольку по сути представляет собой среду выполнения программы на Лиспе, предназначенной для редактирования текста. Emacs 18 (выпущенный в 1987 г.) представил режим сервера [6], предназначенный для непрерывной работы в фоновом режиме. Затем различные экземпляры Emacs могут быть запущены в режиме клиента, подключаясь к этому серверу и разделяя состояние. Время запуска клиента Emacs практически мгновенно, поскольку все, что он делает, это провоцирует существующий процесс Emacs на перерисовку дисплея. | vi - это небольшая и быстрая программа, но с меньшими возможностями настройки. vim эволюционировал из vi, чтобы обеспечить значительно большую функциональность и настройку, чем vi, что делает его сопоставимым с Emacs [примечания 2] . Для небольших текстовых файлов vi запускается практически мгновенно, а vim - почти так же быстро. |
Пользовательская среда | В Emacs, который также изначально был разработан для использования на консоли, была добавлена поддержка графического интерфейса пользователя X11 в Emacs 18, а в версии 19 она сделана по умолчанию. Текущие графические интерфейсы пользователя Emacs включают полную поддержку пропорционального интервала и изменения размера шрифта. Emacs также поддерживает встроенные изображения и гипертекст . | vi, как и emacs, изначально использовался исключительно внутри текстовой консоли, не предлагая графического пользовательского интерфейса (GUI). Многие современные производные vi, например MacVim и gVim, включают графические интерфейсы пользователя. Однако поддержка пропорциональных шрифтов по- прежнему отсутствует. Также отсутствует поддержка шрифтов разного размера в одном документе. [9] |
Функция / интерфейс навигации | Emacs использует аккорды метакей . [примечания 3] Клавиши или связки клавиш могут быть определены как префиксные ключи , которые переводят Emacs в режим ожидания дополнительных нажатий клавиш , составляющих привязку клавиш . Привязки клавиш могут зависеть от режима, дополнительно настраивая стиль взаимодействия. Emacs предоставляет командную строку, доступную для Mx, которую можно настроить на автозаполнение различными способами. Emacs также предоставляет defalias макрос, позволяющий использовать альтернативные имена для команд. | vi использует различные режимы редактирования . В «режиме вставки» клавиши вставляют символы в документ. В «нормальном режиме» (также известном как «командный режим», не путать с «режимом командной строки», который позволяет пользователю вводить команды), простые нажатия клавиш выполняют команды vi. |
Клавиатура | Расширение одного из бэкронимов Emacs - Escape, Meta, Alt, Control, Shift , которое аккуратно суммирует большинство используемых им клавиш-модификаторов, исключая только Super . Emacs был разработан на клавиатуре Space-cadet, у которой было больше ключевых модификаторов, чем у современных раскладок. Есть несколько пакетов Emacs, такие как spacemacs [11] или ergoemacs [12] , что заменить эти комбинации клавиш с них легче ввести, или настройки могут быть сделаны специальные пользователем. | vi не использует Altключ и редко использует Ctrlключ. набор ключей VI, в основном ограничивается буквенно - цифровых клавиш, и побег ключ. Это непреходящий пережиток его телетайпного наследия, но благодаря ему большая часть функций vi становится доступной без частых неудобных прикосновений пальцем. |
Поддержка языков и сценариев | Emacs полностью поддерживает все Unicode-совместимые системы письма и позволяет свободно смешивать несколько скриптов. [13] | vi имеет элементарную поддержку других языков, кроме английского. Современный Vim поддерживает Unicode, если используется с терминалом, поддерживающим Unicode. |
Преимущества Emacs
- Emacs имеет немодальный интерфейс
- Немодальный характер привязок клавиш Emacs делает практичным их поддержку в качестве привязок клавиш для всей ОС. [14]
- Одна из самых портируемых компьютерных программ. Он работает в текстовом режиме и в графических пользовательских интерфейсах в самых разных операционных системах , включая большинство Unix-подобных систем ( Linux , различные BSD , Solaris , AIX , IRIX , macOS [15] [16] и т. Д.), MS- DOS , Microsoft Windows , [17] [18] [19] AmigaOS и OpenVMS . Системы Unix, как бесплатные, так и проприетарные, часто предоставляют Emacs в комплекте с операционной системой .
- Архитектура сервера Emacs позволяет несколько клиентов прикрепить к одному экземпляру Emacs и разделить список буферов, убить кольцо , отменить историю и другое состояние.
- Универсальная интерактивная справочная система с сочетаниями клавиш, функциями и командами, документированными на лету.
- Расширяемый и настраиваемый вариант языка программирования Lisp ( Emacs Lisp ) с функциями, которые включают:
- Возможность эмуляции vi и vim (используя Evil, [20] Viper или Vimpulse).
- Мощный и расширяемый файловый менеджер ( dired ), интегрированный отладчик, а также большой набор средств разработки и других инструментов.
- Если каждая команда является функцией Emacs Lisp, это позволяет командам DWIM (делать то, что я имею в виду), программно реагируя на прошлые действия и состояние документа. Например,
switch-or-split-window
команда может переключиться на другое окно, если оно существует, или создать его, если необходимо. Это сокращает количество нажатий клавиш и команд, которые пользователь должен запомнить. - «ОС внутри ОС». Emacs Lisp позволяет программировать Emacs далеко за пределами возможностей редактирования. Даже базовая установка содержит несколько десятков приложений, включая два веб-браузера , программы чтения новостей, несколько почтовых агентов, четыре клиента IRC , версию ELIZA и множество игр. Все эти приложения доступны везде, где работает Emacs, с одинаковым пользовательским интерфейсом и функциональностью. Начиная с версии 24, Emacs включает диспетчер пакетов , упрощающий установку дополнительных приложений, включая альтернативные веб-браузеры, EMMS ( мультимедийную систему Emacs ) и другие. Также доступны многочисленные пакеты для программирования, в том числе некоторые, предназначенные для определенных комбинаций языка / библиотеки или стилей кодирования.
Преимущества vi
- Команды редактирования можно компоновать [21]
- Vi имеет модальный интерфейс
- Vi загружается быстрее, чем Emacs.
- Будучи глубоко связанным с традициями UNIX, он работает на всех системах, которые могут реализовать стандартную библиотеку C , включая UNIX , Linux , AmigaOS , DOS , Windows , Mac , BeOS , OpenVMS , IRIX , AIX , HP-UX , BSD и POSIX- совместимые. системы.
- Расширяемый и настраиваемый с помощью сценария Vim или API для интерпретируемых языков, таких как Python, Ruby, Perl и Lua.
- Вездесущий. По сути, все Unix и Unix-подобные системы имеют встроенный vi (или его вариант). Vi (и ex, но не vim) указывается в стандарте POSIX . [22]
- Среды восстановления системы, встроенные системы (особенно с BusyBox ) и другие среды с ограничениями часто включают vi, но не emacs.
Эволюция
В прошлом процветало множество небольших редакторов, созданных по образцу vi. Это было связано с важностью сохранения памяти при сравнительно небольшом объеме доступной в то время. По мере того как компьютеры становились все более мощными, многие клоны vi, в частности Vim , увеличивались в размере и сложности кода. Эти современные варианты vi, как и старые облегченные варианты Emacs, имеют тенденцию иметь многие из предполагаемых преимуществ и недостатков противоположной стороны. Например, Vim без каких-либо расширений требует примерно в десять раз больше дискового пространства, необходимого vi, а последние версии Vim могут иметь больше расширений и работать медленнее, чем Emacs. В Искусство программирования Unix , Eric S. Raymond назвал предполагаемый легкий вес Vim, когда по сравнению с Emacs «общий миф». [23] Более того, с большим объемом оперативной памяти в современных компьютерах Emacs и vi имеют меньший вес по сравнению с крупными интегрированными средами разработки, такими как Eclipse , которые, как правило, вызывают насмешки как со стороны пользователей Emacs, так и vi.
Тим О'Рейли сказали, в 1999 году, что O'Reilly Media «s учебник по VI продает в два раза больше копий, что и на Emacs (но отметили , что Emacs пришел со свободным руководством). [24] Многие программисты используют Emacs и vi или их различные ответвления, в том числе Линус Торвальдс, который использует MicroEMACS . [25] Также в 1999 году создатель vi Билл Джой сказал, что vi был «написан для мира, которого больше не существует», и заявил, что Emacs был написан на гораздо более мощных машинах с более быстрыми дисплеями, чтобы они могли иметь «забавные команды с мерцание экрана и все такое, а тем временем я сижу дома в излишках времен Второй мировой войны в Беркли с модемом и терминалом, который едва может убрать курсор с нижней строки ". [26] [27]
Помимо рабочих аналогов Emacs и vi, у pico и его бесплатного клона с открытым исходным кодом nano и других текстовых редакторов, таких как ne, часто есть свои сторонние сторонники в войнах редакторов, хотя и не до такой степени, как Emacs и vi.
По состоянию на 2020 год[Обновить], и Emacs, и vi могут претендовать на звание одной из самых долгоживущих прикладных программ всех времен [28], а также на то, что являются двумя наиболее часто используемыми текстовыми редакторами в Linux и Unix. [29] Многие операционные системы, особенно Linux и производные от BSD , объединяют несколько текстовых редакторов с операционной системой, чтобы удовлетворить потребности пользователей. Например, установка macOS по умолчанию содержит ed , nano , TextEdit и Vim. Часто в какой-то момент обсуждения кто-то указывает, что ed - это стандартный текстовый редактор . [30]
Юмор
Церковь Emacs , [31] , образованный Emacs и проекта GNU «ы создатель Ричард Столлман , это пародия на религию . [32] Хотя он называет vi «редактором зверя» (vi-vi-vi обозначает 6-6-6 римскими цифрами), он не возражает против использования vi ; скорее, он называет проприетарное программное обеспечение анафемой . («Использование бесплатной версии vi - не грех, а наказание» . [33] ) Церковь Emacs имеет свою собственную группу новостей alt.religion.emacs, в которой есть сообщения, якобы поддерживающие эту систему убеждений.
Столлман называл себя Святым I GNU- cius , святым в церкви Emacs. [34]
Сторонники vi создали противоположный Культ vi , который более жесткие пользователи Emacs утверждают, что это попытка «подражать своим лучшим». [ необходима цитата ]
Что касается модальной природы vi (обычная причина разочарования для новых пользователей) [35], некоторые пользователи Emacs шутят, что vi имеет два режима - «гудеть постоянно» и «ломать все». Пользователи vi любят шутить о том, что последовательности клавиш Emacs вызывают синдром запястного канала , или упоминать одно из многих сатирических расширений аббревиатуры EMACS, например, «Escape Meta Alt Control Shift» (удар по зависимости Emacs от клавиш-модификаторов) [36] или « Восемь мегабайт и постоянный обмен местами »(в то время, когда это был большой объем памяти) или« EMACS делает любой компьютер медленным »( рекурсивная аббревиатура, похожая на те, которые использует Столлман) [37] или« В конце концов перехватывает все компьютерное хранилище », для справки к высоким требованиям Emacs к системным ресурсам. GNU EMACS был расширен до «Обычно не используется, за исключением компьютерных ученых среднего возраста», ссылаясь на его самых ярых поклонников, и на снижение его использования среди молодых программистов по сравнению с более графически ориентированными редакторами, такими как Atom , BBEdit , Sublime Text , TextMate , и код Visual Studio .
Как совать в Emacs' фичемании , VI защитники были известны , чтобы описать Emacs , как „большая операционная система, не хватает только приличный редактора“. Сторонники Emacs, как известно, отвечали, что редактор на самом деле очень хорош, но операционная система могла бы использовать улучшения (имея в виду известное отсутствие параллелизма в Emacs , которое теперь было добавлено [38] ).
Игра среди пользователей UNIX, предназначенная либо для проверки глубины понимания редактора пользователем Emacs, либо для того, чтобы высмеять сложность Emacs, предполагала предсказание того, что произойдет, если пользователь удержит клавишу-модификатор (например, Ctrlили Alt) и наберет свой свое имя. Этот игровой юмор был создан [39] пользователями старого редактора TECO , который с помощью макросов был основой реализации исходного Emacs.
Из-за того, как выйти из vi (среди прочего, ": q"), хакеры шутят о предлагаемом методе создания псевдослучайной последовательности символов , когда пользователь, не знакомый с vi, сидит перед открытым редактором и просит его выйти из программы. [ необходима цитата ]
Поисковая система Google также присоединился на шутку, имея поиски VI в результате вопрос «Вы имели в виду: Emacs» подтолкнули в верхней части страницы, и ищет Emacs , в результате «Возможно , вы имели в виду: VI».
Смотрите также
- Браузерные войны
- Сравнение текстовых редакторов
Заметки
- ^ a b В настоящее время оба редактора предоставляют простые способы реализации сочетаний клавиш друг друга. В Emacs привязки клавиш Vim реализуются через режим Evil, тогда как в Vim привязки клавиш Emacs реализуются через пакет Vimacs. Хотя сочетания клавиш Vim популярны благодаря своей эргономичности, возможно, самая эргономичная клавиша на клавиатуре, т.е. пробел, в Vim не используется. Популярная альтернатива способам навигации Emacs и Vim была реализована с помощью Spacemacs, популярной конфигурации Emacs, в которой пробел используется в качестве основной клавиши для управления и навигации. Идея Spacemacs также была перенесена на Vim через Spacevim.
- ^ По состоянию на 2013 год[Обновить], vim имеет 1731 kLOC кода (1142 в стандартном дистрибутиве C + 506, vimScript + 83, связанный с make-файлом), тогда как GNU Emacs имеет 1623 (всего 299 в стандартном дистрибутиве C + 1270 Emacs Lisp + 54 связанных с make-файлами). [7] [8] Доступно множество дополнительных пакетов Emacs Lisp (и Vimscript); цифры здесь относятся только к коду, который фактически включен в основную загрузку соответствующего редактора.
- ^ В Emacs также есть нечто, называемое «режимами»; однако в Emacs они обычно относятся к состояниям долгосрочного взаимодействия, которые применяются в течение всего времени работы с данным файлом или набором данных, что не является определением модального интерфейса как такового . [10]
Рекомендации
- ^ «Священная война (хакерский жаргон)» . Архивировано из оригинала на 2012-04-02 . Проверено 30 ноября 2016 .
- ^ «EMACS против vi: бесконечная« священная война » компьютерных фанатов » . Архивировано из оригинала на 2016-11-30 . Проверено 30 ноября 2016 .
- ^ «Просто дай мне код» . Архивировано из оригинала на 2015-05-01 . Проверено 24 апреля 2015 .
- ^ «Почему имеет значение стиль кодирования» . Архивировано из оригинала на 2015-05-03 . Проверено 24 апреля 2015 .
- ^ «Сводка запуска» .
- ^ «НОВОСТИ.18» . Архивировано из оригинала на 2015-06-14.
Таким программам, как почтовые программы, которые вызывают «редактор» в качестве подчиненного для редактирования некоторого текста, теперь можно указать использовать существующий процесс Emacs вместо создания нового редактора.
- ^ «Проект с открытым исходным кодом GNU Emacs на странице Open Hub: Languages» . Ohloh.net . Проверено 1 декабря 2014 .
- ^ «Проект с открытым исходным кодом Vim на странице Open Hub: Languages» . Ohloh.net . Проверено 1 декабря 2014 .
- ^ "syntax.txt" .
Все используемые шрифты, за исключением меню и всплывающей подсказки, должны иметь тот же размер символа, что и шрифт по умолчанию! В противном случае возникнут проблемы с перерисовкой.
[ постоянная мертвая ссылка ] - ^ «EmacsWiki: режимы категорий» . Emacswiki.org . Проверено 1 декабря 2014 .
- ^ "космические машины" .
- ^ «Ergoemacs» .
- ^ "Международные символы" .
Внутри Emacs использует свою собственную многобайтовую кодировку символов, которая является надмножеством стандарта Unicode. Эта внутренняя кодировка позволяет смешивать символы почти всех известных сценариев в одном буфере или строке. Emacs осуществляет перевод между кодировкой многобайтовых символов и различными другими системами кодирования при чтении и записи файлов, а также при обмене данными с подпроцессами.
- ^ «(Emacs) Сочетания клавиш для редактирования текстовых полей в OS X» .
- ^ "Пакет Carbon Emacs" . Архивировано из оригинала на 2007-03-14 . Проверено 27 сентября 2006 .
- ^ «Aquamacs - это простой в использовании Emacs в стиле Mac для Mac OS X» . Проверено 27 сентября 2006 .
- ^ Б. Рампрасад (24 июня 2005 г.). «Часто задаваемые вопросы по GNU Emacs для Windows 95/98 / ME / NT / XP и 2000» . Проверено 27 сентября 2006 .
- ^ Боргман, Леннарт (2006). "Домашняя страница EmacsW32" . Архивировано из оригинала на 2007-03-06 . Проверено 27 сентября 2006 .
- ^ «GNU Emacs в Windows» . Franz Inc. 2006 . Проверено 27 сентября 2006 .
- ^ «Зло - Дом - Открытая вики» . gitorious.org . 29 мая, 2014. Архивировано из оригинального 16 -го сентября 2014 года . Проверено 16 сентября 2014 года .
- ^ Козловский, Майк. «Почему Atom не может заменить Vim» . Проверено 7 мая 2014 .
- ^ «vi» . pubs.opengroup.org . Проверено 11 марта 2017 .
- ^ «Правильный размер для редактора» . Catb.org . Проверено 1 декабря 2014 .
- ^ "Редактор: vi или emacs?" . Oreilly.com. 21 июня 1999 года Архивировано из оригинала на 1 апреля 2014 года . Проверено 1 декабря 2014 .
- ^ Ярослав Жешотко. «Stifflog: Stiff спрашивает, великие программисты отвечают» . Stifflog.com. Архивировано из оригинала 8 ноября 2006 года . Проверено 1 декабря 2014 .
- ^ Вэнс, Эшли (11 сентября 2003 г.). «Величайший подарок Билла Джоя человеку - редактор vi» . theregister.co.uk . Архивировано 3 июня 2014 года . Проверено 3 июня 2014 года .
- ^ Джой, Билл (ноябрь 1999 г.). «Радость Unix: соучредитель Sun Microsystems Билл Джой показывает, как Linux и свободное программное обеспечение подходят для солнечной системы его компании» . Журнал Linux (Интервью). Беседовал Евгений Эрик Ким. Архивировано из оригинала 7 февраля 2003 года . Проверено 3 июня 2014 года .
- ^ Ауэрбах, Давид (9 мая 2014 г.). «Старейшее соперничество в вычислительной технике» . Шифер .
Две конкурирующие программы могут претендовать на звание одного из самых долгоживущих приложений всех времен. Обе программы вот-вот вступят в свое пятидесятилетие. Обе программы являются текстовыми редакторами для ввода и редактирования кода, файлов данных, необработанных веб-страниц HTML и всего остального. И они смертельные враги.
- ^ «Выбор редактора» .
эти два редактора выражают резко противоположные философии дизайна, но оба чрезвычайно популярны и пользуются большой лояльностью со стороны определяемых основных групп пользователей. Опросы программистов Unix неизменно указывают на то, что между ними делится 50/50, при этом все остальные редакторы практически не регистрируются.
- ^ «Эд, мужик!! Мужик» . Gnu.org . Проверено 1 декабря 2014 .
- ^ « Правила, грехи, добродетели, боги и многое другое в Церкви Emacs » . Gnu.org . Проверено 1 декабря 2014 .
- ^ "Святой IGNUcius - Ричард Столмен" . Stallman.org. Архивировано из оригинального 22 ноября 2014 года . Проверено 1 декабря 2014 .
- ^ «Полная выборочная стенограмма выступления Ричарда Столлмана в ANU» . Linuxhelp.blogspot.com . Проверено 1 декабря 2014 .
- ^ "Святой IGNUcius - Ричард Столмен" . Stallman.org . Проверено 1 декабря 2014 .
- ^ vi (Хакерский жаргон)
- ^ «Несколько забавных расширений сокращений Emacs» . Gnu.org. Архивировано 16 февраля 2021 года . Проверено 1 декабря 2014 .
- ^ Рёслер, Вольфрам. «Список сокращений Unix» . Архивировано 16 февраля 2021 года . Проверено 4 марта 2021 года .
- ^ «Параллельное приземлился (было: Пожалуйста , проверьте слияние параллельности бр» . Lists.gnu.org Retrieved. 2020-12-08 .
- ^ «Настоящие программисты не используют PASCAL». Дата : 263–265. Июль 1983 г.
Внешние ссылки
- Результаты эксперимента по сравнению Vi и Emacs
- Сравнение нажатий клавиш для каждой задачи
- Юмор вокруг Vi, Emacs и их сравнений
- Результаты Sucks-Rules-O-Meter для Vi и Emacs из комментариев, сделанных в Интернете
- В церкви Emacs «использование бесплатной версии vi - это не грех, это наказание».
- Emacs предлагает функциональность Vi из Emacs wiki
- Emacs против Vi , из WikiWikiWeb
- Правильный размер для редактора, обсуждающего vi и Emacs в относительно современных терминах