каковы плюсы и минусы vim и emacs?

<p>как бы вы сравнили эти редакторы? каковы плюсы и минусы каждого?</p><p>[<strong>примечание</strong>] на это не должны отвечать те, кто "ненавидит одного и любит другого" или те, кто не использовал оба.</p>

<p>я использую оба, хотя, если бы мне пришлось выбирать один, я знаю, какой бы я выбрал. тем не менее, я постараюсь сделать объективное сравнение по нескольким вопросам.</p><ul> <li> <p><strong> доступно везде? </strong> если вы профессиональный системный администратор, работающий с системами unix, или опытный пользователь на встроенных устройствах (маршрутизаторах, смартфонах с busybox,… ), вам нужно знать vi (не vim), потому что он доступен во всех unix-системах и большинстве unix-подобных систем, будь то десктоп, сервер или встроенный. для обычного пользователя этот аргумент не имеет значения: emacs легко доступен для любой операционной системы настольного компьютера или сервера, и, поскольку он поддерживает удаленное редактирование, его все равно достаточно, чтобы он был установлен на вашем компьютере.</p> </li> <li> <p><strong> раздутый? </strong> emacs когда-то с юмором обозначал "восемь мегабайт и постоянный обмен". прямо сейчас на моей машине google chrome нужно примерно столько же ram на одну вкладку, как в emacs для 100 открытых файлов), и я даже не буду упоминать firefox в 21 веке раздувание emacs - это просто миф.</p> <p><em> особенность</em> раздувать тоже не проблема. если вы не используете его, вам не нужно знать, что это там. функции emacs не используются, когда вы их не используете, и документация очень хорошо организована.</p> </li> <li> <p><strong> время запуска </strong>: сторонники vi (m) жалуются на время запуска emacs. да, emacs запускается медленно, но это не имеет большого значения: вы запускаете emacs один раз за сессию, а затем подключаетесь к запущенному процессу с помощью <code>emacsclient</code>. так что медленный запуск emacs - это в основном миф.</p> <p>есть одно исключение, когда вы входите на удаленный компьютер и хотите отредактировать файл там. запуск удаленного emacs (обычно) медленнее, чем запуск удаленного vim. в некоторых ситуациях вы можете поддерживать работу emacs внутри screen. вы также можете редактировать удаленные файлы из emacs, но это нарушает поток, если вы находитесь в сеансе ssh в терминале. (поскольку xemacs 21 или gnu emacs 23, вы можете открыть окно emacs из запущенного экземпляра x внутри терминала.)</p> <p>перевернув таблицы, я заметил, что vim загружается заметно дольше, чем emacs (<code>vim -u /dev/null</code> против <code>emacs -q</code>). по общему признанию это было на странной платформе (cygwin).</p> </li> <li> <p><strong> начальная кривая обучения: </strong> это варьируется от человека к человеку. <a href="https://unix.stackexchange.com/questions/986/vim-vs-emacs-and-no-this-is-not-a-flame-war/988#988">график майкла мрозека</a> заставил меня рассмеяться. серьезно, я согласен с тем, что кривая обучения vim начинается быстрее, круче, чем у любого другого редактора, хотя это можно уменьшить с помощью gvim.</p> <p>поскольку я развеял пару мифов emacs, позвольте мне развеять миф vi: модальный редактор не сложен и не болезнен в использовании. требуется небольшая привычка, но через некоторое время это кажется очень естественным. если бы я изменил дизайн vi (m), я бы определенно сохранил режимы.</p> </li> <li> <p><strong> асимптотическая кривая обучения: </strong> и vim, и emacs имеют много функций, и вы будете открывать новые после нескольких лет использования.</p> </li> <li> <p><strong> производительность </strong>: это чрезвычайно сложная тема. сторонники vi (m) утверждают, что вы можете делать практически все, не выходя из домашнего ряда, и это делает вас более эффективным, когда вам это нужно больше всего. сторонники emacs возражают, что emacs имеет много команд, которые используются не часто, поэтому не стоит связывать ключи, но они чертовски удобны, когда они вам нужны ( <a href="http://xkcd.com/378/">обязательная ссылка на xkcd</a> ).<br> <sub>мое личное мнение заключается в том, что emacs в конечном итоге выиграет, если у вас нет возможности печатать (и даже тогда вы можете настроить emacs так, чтобы он требовал только последовательности клавиш, а не такие комбинации, как <kbd>ctrl</kbd>+ письмо). клавиши домашнего ряда хороши, но часто они не так уж выигрывают, потому что вам нужно переключать режимы. я не думаю, что vim может что-то сделать <em> значительно</em> более эффективно, чем emacs, тогда как обратное утверждение верно.</sub></p> </li> <li> <p><strong> настраиваемость </strong>: оба редактора являются программируемыми, и для обоих существует обширный пакет доступных пакетов. тем не менее, vim - редактор с макроязыком; emacs - это редактор, написанный на lisp с некоторыми специальными примитивами. emacs выигрывает эффектно, когда вы пытаетесь сделать что-то, о чем авторы просто не думали. это происходит не каждый день, но накапливается с годами.</p> </li> <li> <p><strong> больше, чем редактор </strong>: vim - редактор. emacs - это не просто редактор: это также ide, файловый менеджер, эмулятор терминала, веб-браузер, почтовый клиент, новостной клиент ... это хорошо или плохо - вопрос дискуссионный. но вы можете использовать emacs в качестве простого редактора (см. "разворот возможностей" выше).</p> </li> <li> <p><strong> как ide </strong>: и vim, и emacs поддерживают множество языков программирования и других текстовых форматов. помимо основ, таких как синтаксическая раскраска и автоматическое отступление, оба имеют расширенные функции ide, такие как поиск перекрестных ссылок кода и документации, вспомогательные вставки и рефакторинг, интегрированный контроль версий и возможность инициировать компиляция и переход к первой ошибке.</p> <p>одной из областей, где emacs лучше, чем vim, является взаимодействие с <em> асинхронными</em> подпроцессами. вот когда вы начинаете длинную компиляцию и хотите сделать что-то еще в том же экземпляре редактора, пока компилятор работает. или когда вы хотите взаимодействовать с <a href="http://en.wikipedia.org/wiki/read-eval-print\_loop">цикл чтения-eval-print</a> - emacs действительно блестит в этом, vim предлагает только неуклюжие хаки. тем не менее, новая ветка vim, <a href="https://github.com/neovim/neovim">neovim</a> , исправила это и внедрила другие исправления ошибок, не реализованные в стандартной версии vim.</p> </li> </ul>

<p>я опубликую то, что я считаю основными преимуществами каждого:</p><hr><p>emacs имеет значительно больше расширений, позволяющих вам выполнять задачи, которые связаны только с текстовым редактором, такие как просмотр файловой системы или работа с контролем версий, а также расширения, которые никак не связаны с текстовым редактором, такие как чтение rss-каналов. если вам нужна среда, а не просто текстовый редактор, emacs будет лучше, чем vim. я также думаю, что изучать emacs намного проще, несмотря на то, что некоторые заставят вас поверить:</p><p> <a href="https://i.stack.imgur.com/phbar.png"><img src="https://i.stack.imgur.com/phbar.png" alt="editor learning curve comic"></a> </p><p>в частности, я думаю, что начинающий пользователь emacs будет быстрее, чем начинающий пользователь vim</p><hr><p>с другой стороны, vim, несомненно, быстрее. похоже, что это основная часть аргумента, но, по моему мнению, нет никакого конкурса вообще; я считаю себя свободным пользователем emacs, и я не могу сравниться с парой знакомых, которые имеют равные знания vim. проблема в том, что количество людей, которые достаточно хорошо владеют vim, чтобы быть таким быстрым, невероятно мало (из ~ 30 человек, с которыми я общаюсь регулярно, которые используют vim, я думаю, что только один исключительно хорош в этом). существует большой разрыв между <em> возможным </em> увеличением скорости и <em> фактическим </em> увеличением скорости вы достигаете; пользователи emacs будут почти такими же быстрыми, как 99% пользователей vim, и (как я уже говорил в разделе emacs) начинающие пользователи emacs, вероятно, будут быстрее, чем начинающие пользователи vim.</p>

<p>существует <code>vi</code>, доступное в каждой системе unix (или почти), однако этого нельзя сказать о любом другом редакторе. это причина № 1, imo, чтобы узнать и ознакомиться с <code>vi</code> (обратите внимание, "vi", а не "vim"). я никогда не видел, чтобы emacs был доступен при установке по умолчанию.</p><p>я не говорю, что не используйте emacs, или это единственная причина использовать vim, но если вы хотите использовать unix-системы, которые не принадлежат вам ... <code>vi</code> является частью универсального язык.</p>

<p>я думаю, что они оба потрясающие. я думаю, что любой из них может сделать практически все, что вы можете себе представить, и они оба настолько настраиваемы, что к тому времени, как вы закончите настраивать их, они оба будут именно такими, какими вы хотите их видеть, ни больше, ни меньше.</p><p>emacs выделяется мне тем, что он немного ближе (хотя все еще не соответствует) стандартам исо/мэк в отношении удобства использования и согласованности для пользовательских интерфейсов, и, следовательно, не использует столько уловок с вашими "инстинктами", как это делает vim. время жизни инстинктов, которые вы разработали, работая с другими программами, не сработает против вас.</p><p>vim - это совершенно другая модель, и во многих отношениях она превосходит себя сама по себе, поскольку гораздо меньше полагается на последовательности cntrl/alt, а вместо этого - только на ее режимы, позволяя вам сохранять свои харды на домашней строке и вводить текст. быстрее. но vim практически уникален, и если вы не установите какое-то очень необычное сопровождающее программное обеспечение (например, vimperator, jumanji/zathura и т.д.), инстинкты, которые вы развиваете, работая с vim, не перейдут на другие программы и наоборот. тем не менее, я остановился на vim себя. вы должны остановиться на одном рано или поздно, к лучшему или худшему, так как трудно овладеть обоими.</p>

<p>я использую оба на регулярной основе. я рассматриваю emacs как "живой" редактор, тогда как я использую vim для быстрых одноразовых задач. внешне emacs гораздо более раздутый, чем vim, и поэтому "запускать" не так удобно, как vim, но я также обнаружил, что философия пользовательского интерфейса от одного к другому поддерживает эту парадигму. emacs намного больше построен, чтобы держать вас внутри, делая вещи приятными и удобными, чтобы вам не пришлось уходить, тогда как vim гораздо более "unixy" и видит себя как часть большего пояса инструментов.</p><p>многие люди бегут из emacs из-за его сильной зависимости от <a href="http://en.wikipedia.org/wiki/bucky\_bit">bucky bits</a> , но для меня это довольно глупая причина. реальная сила, которую emacs имеет над vim, - это настраиваемость, и с мощью viper и т.д. это действительно не проблема. конечно, vim-script обеспечивает свой собственный уровень настройки, и, если, скажем, ваш любимый язык программирования не был снабжен соответствующим средством подсветки синтаксиса, вы, безусловно, могли бы его создать, но в конечном итоге emacs - это самодостаточный lisp-компьютер, и в конец, вы можете сделать гораздо больше, возиться с этим. просто нет таких инструментов, как <a href="http://en.wikipedia.org/wiki/gnus">gnus</a> или <a href="http://orgmode.org/">org-mode</a> , чтобы назвать несколько. короче говоря, emacs - это не просто редактор, это практически проклятая операционная система.</p><p>для манипулирования текстом я бы сказал, что они в точности соответствуют.</p>

<p>я вложу свои 0,02 доллара, так как я провел несколько лет, используя emacs и xemacs, а затем перешел на vim. честно говоря, в 1990-1992 годах я довольно часто использовал vi, поэтому я был знаком с его пользовательским интерфейсом.</p><p><strong> emacs </strong></p><ul> <li> <p>emacs был описан как система lisp, которую просто использовали для написания редактора, и в этом есть доля правды. вы можете реализовать практически все, что захотите, в elisp, если не торопитесь, чтобы понять окружающую среду. не могу сказать, что когда-либо узнавал это так хорошо, но иногда я делал что-то холодное. emacs и xemacs не полностью совместимы на этом уровне, поэтому сторонние скрипты могут работать на одном, но не на другом.</p> </li> <li> <p>было замечено, что rms и некоторым другим известным хакерам emacs пришлось отказаться от программирования из-за проблем с oos, где до сих пор работают билл джой, брэм муленаар и различные другие знаменитости. emacs тяжело на твоих мизинцах.</p> </li> <li> <p>emacs является гораздо более католической системой, чем vi, и рассматривается как канонический пример <a href="http://www.jwz.org/hacks/">охват программного обеспечения</a> . наряду с netscape, это один из <a href="http://en.wikipedia.org/wiki/jamie\_zawinski">jwz</a> вкладов в доказательство этого закона.</p> </li> </ul><p>одна уникальная вещь, которую я однажды сделал с xemacs, состояла в том, чтобы он работал на машине и открыл сеанс x на xterminal (на самом деле старый перенастроенный sun 3/60) в другой комнате для того же буфера на том же работающем экземпляре.</p><p><strong> плюсы: </strong> расширяемый, более мощный, чем любой другой редактор, известный человеку, зрелая интеграция практически со всеми основными инструментами программирования свободных программ.</p><p><strong> минусы: </strong> сомнительная эргономика, elisp нелегко освоить.</p><p><strong> vim </strong></p><p>отказ от ответственности - я перешел от использования emacs к vim около 10 лет назад, и я обычно использую vim в системах на базе windows и unix/linux.</p><ul> <li> <p>vi и его потомки имеют очень хорошие возможности макросов клавиатуры для автоматизации задач редактирования. средство сценариев в vim не так сложно, как elisp, но вы можете создать его с поддержкой python, tcl, perl и, возможно, некоторых других систем. я только иногда писал сценарии (за исключением файлов .vimrc) для vim.</p> </li> <li> <p>vim занимает меньше места, чем emacs, но в наши дни это не так уж важно.</p> </li> <li> <p>документация и помощь vim довольно хороши. emacs имеет неплохую онлайновую документацию, но я не думаю, что она такая же всеобъемлющая, как у vim.</p> </li> <li> <p>vim наследует причудливый модальный пользовательский интерфейс vi, но теперь он может вести себя почти как немодальный редактор, поскольку вы можете перемещаться в режиме вставки. в windows он может вести себя аналогично приложению windows.</p> </li> </ul><p><strong> плюсы: </strong> хорошие возможности макросов клавиатуры, неплохо расширяемые возможности и скрипты, но не такие хорошие, как в emacs. vim или производные от vi редакторы являются стандартными в большинстве, если не во всех дистрибутивах unix или linux общего назначения. возможно лучшая эргономика.</p><p><strong> минусы: </strong> модальный пользовательский интерфейс кажется странным людям, привыкшим к пользовательским интерфейсам windows. меньше проблем с vim в эти дни.</p>

<p>я обычно использую vim, но они оба замечательные редакторы.</p><p>научиться пользоваться vi было неприятно, но я прошел через это и научился любить его. мои самые неприятные моменты были, когда был включен ключ блокировки крышки. вы можете попробовать с gvim, но одно из самых больших преимуществ vi и emacs - это возможность делать аккуратные вещи, держа руки на клавиатуре, и gvim, вероятно, будет держать вас при использовании мыши. (изучение одновременной игры в жанре roguelike дало мне возможность тренироваться с клавишами перемещения курсора, но иногда заставляло меня пытаться перемещаться по диагонали в документах.)</p><p>emacs, вероятно, более доступен. это немодально, и вы не облажаетесь, нажимая клавишу блокировки колпачков. идея управления редактором с помощью ввода букв с нажатой клавишей управления не должна быть чужды современным опытным пользователям, хотя фактические клавиши для выполнения действий будут казаться дикими и произвольными для обычного пользователя windows/mac os x. опять же, версии, которые позволяют вам использовать мышь, в долгосрочной перспективе приносят вам мало пользы.</p><p>оба требуют определенного уровня экспертизы для эффективного использования. в отличие от, скажем, блокнота, вы не можете просто сидеть и редактировать.</p><p>оба настраиваемы, хотя за мои деньги написание расширений в одном и том же lisp, в котором написан редактор, облегчает работу. (emacs, как обычно распространяется, на самом деле не редактор. это среда lisp, предназначенная для обработки текста, с большим количеством предварительно написанного программного обеспечения, включая редактор. отсюда и шутка: "emacs создает приличную оболочку, но он может использовать лучший редактор. ")</p><p>я обычно использую vim, потому что после интенсивных тренировок мне легче. это может быть связано с преимуществами системы режимов, где огромное количество команд доступно с помощью одного пальца возле домашних рядов, или "синдром детской утки", который очень применим к редакторам: как только вы выучите хорошую, вы обычно придерживаетесь к этому.</p><p>вы не ошибетесь, используя либо.</p>

<p>мне кажется, что приведенный выше комментарий "vim is modal" неверен. у вима есть команды. вы можете сделать "11anow - время для всех хороших людей ..." и в итоге получите 11 одинаковых новых строк текста в вашем файле. это команда, а не режим. но на самом деле есть очень принципиальное отличие команд vim от команд emacs. я не совсем уверен, что могу описать это, но эрик фишер включил редактирование строк в стиле emacs в драйвер tty более 10 лет назад и опубликовал статью об этом:</p><p> <a href="http://www.usenix.org/event/usenix99/full\_papers/fischer/fischer.pdf">http://www.usenix.org/event/usenix99/full\_papers/fischer/fischer.pdf</a> </p><p>он обнаружил, что редактирование линий в стиле emacs принципиально отличается от стиля vi.</p><p>таким образом, emacs имеет преимущество в том, что многие другие вещи (bash, gnuplot, zsh, ksh и другие, которые я не могу придумать не по своей голове) все в итоге реализуют редактирование строк в стиле emacs.</p><p>должен отметить, что лично я использую vim все время. я всего лишь очень редкий пользователь emacs.</p>

<p>поскольку это прямо не указано, я добавлю, что нет лучшей среды программирования (lisp в коробке, slime и т.д.), чем слегка измененный дистрибутив emacs. все мои потребности в программировании (99%) решаются изнутри vim, но для всех тех библиотек и подпрограмм lisp, которые я пишу, мне нужно запустить emacs, чтобы сделать что-нибудь продуктивное.</p>

<p>основная причина, по которой я не использую vi/vim, заключается в том, что он модальный. основная причина, по которой я использую vi, заключается в том, что он доступен практически везде.</p>

<p>я использую vim/gvim.</p><p>раньше я использовал emacs, но обнаружил, что gvim в целом работает быстрее на медленных машинах, плюс, из-за требований posix, vi доступен практически везде.</p><p>когда я использую vim или gvim, я часто использую мышь, я думаю, что поддержка для нее великолепна.</p><p>я начал использовать emacs, потому что его было проще использовать для начинающего пользователя. я обнаружил, что использование nano по какой-то причине довольно подвержено ошибкам, и в какой-то момент я понял, что мне гораздо удобнее использовать vi.</p><p>прямо сейчас это смесь. я часто использую eclipse и gedit. vim, однако, все еще мой любимый и наиболее используемый редактор.</p>

<p>я использую gvim и emacs достаточно хорошо, чтобы быть продуктивным, хотя я не разбираюсь ни в одном. одно могу сказать с уверенностью, что vim и gvim работают быстрее на моем ноутбуке с windows 7 (который я должен использовать на работе). emacs в windows имеет странную привычку "приостанавливать" до минуты и перестать отвечать на запросы, даже продолжая принимать ввод с клавиатуры, перед тем как выплеснуть все накопленное в буфере клавиатуры в режиме rush. этого не происходит в mac os или linux. тем не менее, я чаще всего использую vim или gvim на всех платформах, поэтому мне не нужно останавливаться и думать о том, какой редактор я использую и настраивать. тем не менее, в чисто * nix-среде я, вероятно, останусь с emacs, потому что нахожу немодальное редактирование немного более естественным.</p><p>итог: на мой взгляд, оба редактора достаточно мощны, чтобы справиться с любыми нуждами редактирования текста. выбор должен основываться на практических соображениях (таких как особенности реализации платформы) и стиле работы.</p>

<p>основное различие между emacs и vim - эргономично. существует синдром запястного канала, cts, как вы знаете. emacs очень опасен, если у вас есть cts и провоцирует cts. vim - нет, об этой разнице можно прочитать во многих местах. например, в vim вы можете редактировать текст только одним пальцем. в emacs - нельзя :)</p>