Различия между Emacs и Vim


686

Не вдаваясь в религиозные споры о том, почему одно лучше другого, каковы практические различия между Emacs и Vim? Я хочу изучать одно или другое, но я понимаю, что кривая обучения для каждого высока, и я не могу решить. Я никогда не использовал редактор такого типа (я всегда использовал IDE), поэтому все, что помогает новичку, является плюсом.


Перед началом пламенной войны: я не спрашиваю, что лучше, я спрашиваю различия между ними. Я хотел бы объективное сравнение.


3
Если вы используете Mac (OSX), то обнаружите, что многие основные команды перемещения курсора в emacs работают практически везде. (Например, они работают здесь, где я пишу этот комментарий на веб-странице.) Так что для пользователей Mac есть общесистемное преимущество в изучении по крайней мере следующего подмножества emacs: ^ A ^ B ^ D ^ E ^ F ^ K ^ L ^ N ^ O ^ P ^ T ^ V ^ Y
Мэтт

2
@JamesAnderson: по моему опыту все наоборот. Использовал vim 2,5 года, затем перешел на emacs. Людям из Emacs по большому счету все равно ... "все, что работает для тебя". Вот что ,salespitchговорится в #emacs<fsbot> We aren't gonna lie. Emacs sucks. Some of us tolerate it, but we can't tell you if YOU'LL be able to. Try it and make up your own mind.
Silex,

2
Emacs - определенно отличная операционная система, но ей не хватает только достойного редактора.
technical_difficulty

1
@ JimmyM.G.Lim Нет, он использует текущий пейджер в системе. Если вы запустите, PAGER=cat manтогда человек выведет текст прямо на экран.
SS Anne

1
угадайте, что «полиции, основанной на мнениях» не существовало, когда об этом впервые спросили ;-) ах, более простые времена ... я скажу одно: однажды, читая книгу по emacs и пробуя ее, я подумал была бомба. Через 3 недели отпуска я обнаружил, что полностью забыл все нажатия клавиш. vim, с другой стороны, не совсем моя вещь, но я могу с уверенностью полу-функционировать с ним при необходимости, используя just i, esc, wq.
JL Peyret

Ответы:


491

(текст ниже - мое мнение, его не следует воспринимать как факт или оскорбление)

Предполагается, что с Emacs он будет открыт 24 часа в сутки, 7 дней в неделю и внутри программы, практически все, что вы делаете, может быть сделано оттуда. Вы пишете свои собственные расширения, используете их для ведения заметок, организации, игр, программирования, доступа к оболочке, доступа к файлам, прослушивания музыки, просмотра веб-страниц. Потребуются недели и недели, пока вы будете счастливы с этим, а затем вы будете постоянно учиться новому. Вы будете раздражены, когда у вас нет доступа к нему и постоянно меняете свой конфиг. Вы не сможете легко использовать версии Emacs других людей, и они не будут просто установлены. Он использует Лисп, и это здорово. Вы можете превратить его во что угодно. (что-нибудь вообще)

С Vim он почти всегда предустановлен. Это быстро. Вы открываете файл, делаете быстрое редактирование и затем выходите. Вы можете работать с базовой настройкой, если вы находитесь на чужой машине. Это не совсем так редактируемо, но все же намного лучше, чем большинство текстовых редакторов. Он распознает, что большую часть времени вы читаете / редактируете, а не печатаете, и ускоряет эту часть. Вы не страдаете от Emacs Pinkie . Это не так бесит. Это легче учиться.

Несмотря на то, что я использую Emacs весь день каждый день (и мне это нравится), если вы не собираетесь проводить много времени в выбранной вами программе, я бы выбрал vim


154
Не имея этого в наличии: я предлагаю поместить ваши .emacs и .emacs.d в репозиторий с контролем исходного кода, и поэтому получение идеальной настройки Emacs - это просто проверка.
Дункан Бэйн

7
И emacs, и vim могут страдать от того, что описано выше: оба могут быть сконфигурированы до такой степени, что они не распознаются по сравнению с их ванильными формами. Кроме того, я второй использование VCS.
Алексей Магура

11
На каких системах вы работаете, @Radu? Я никогда не видел реальной системы в 2010-х годах, которая имела бы реальный, viа не vimнавязанный этому.
ELLIOTTCABLE

9
Возможно, Vim легче изучать, чем Emacs, но это невероятно запутывает, когда вы запускаете его в первый раз, если у вас нет предыдущего опыта работы с ним! Я должен был использовать Google, чтобы иметь возможность закрыть его, и все же пришлось попробовать несколько раз, чтобы сделать это правильно.
Привет, до свидания,

9
Никогда не стоит недооценивать «предустановленный» перк VIM: он почти всегда доступен везде, где бы вы ни находились, и его можно использовать практически без настройки. Я использую его все время при sshподключении к другим машинам. Вот почему я узнал об этом первым, потому что мои друзья знали VIM и могли мне помочь. (Не
стоит

137

Вим не оболочка. И это плохо связывается с подпроцессами. Это почти по замыслу, тогда как в Emacs эти элементы включены по замыслу. Это означает, что некоторые вещи, такие как встраивание отладчика или интерпретатора (в результате чего-то вроде IDE), сложны в Vim.

Кроме того, ярлыки Emacs доступны в основном через модификаторы, и, очевидно, интерфейс Vim является модально модным, предоставляя доступ к абсурдному количеству прямых ключей для манипуляции.

Раньше Emacs был единственным редактором, который был программируемым, и, хотя Vim имеет много странных уровней в своей программируемости, с добавлением привязок Python и Ruby (и больше, я забыл), Vim также программируется в большинстве случаев. вы бы позаботились о.

Я использую Vim, и я довольно доволен этим.


6
Небольшое обновление: Vim поддерживает улучшенную связь с подпроцессами, так как в версиях 8.0 и 8.1 даже были введены терминальные буферы, поэтому в этом отношении он становится немного ближе к emacs.
DarkWiiPlayer

110

Vim:

  • лучше в качестве простого редактора (для простых задач требуется меньше ключей)
  • более активное сообщество сценаристов - внутренний язык: vimscript
  • один центральный репозиторий скриптов, плагинов, цветовых схем, ...
  • также расширяемый в python, ruby
  • можно сделать переносимым (с этим у emacs есть некоторые проблемы)

Emacs:

  • по умолчанию не модальный (большинство современных редакторов выбрали этот подход). Хотя есть режим зла, который подражает поведению vim.
  • более мощный язык для его расширения (elisp - полноценный язык, и в emacs вы можете практически все переопределить; в vim вы не можете переопределить встроенные функции редактора. С другой стороны, vimscript относительно похож на современные динамические языки, тогда как elisp не очень похоже на что-либо)
  • более расширяемый
  • отличная поддержка инструментов GNU (куча из них)

Лично я предпочитаю vim - он маленький, делает то, что должен, и когда я желаю полноценной IDE, я открываю VS. Подход Emacs быть редактором, который хочет быть IDE (или, я бы сказал, ОС), но не совсем, IMHO, устарел. В прежние времена наличие почтового клиента, ftp-клиента, тетриса ... чего-то еще в одном пакете (emacs) имело какой-то смысл ... в настоящее время его уже нет.

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


47
«лучше как редактор» довольно расплывчато. Мне было бы интересно узнать причины этого.
Аллен

41
@ Аллен - Что в этом смутного? Я редко встречаю пользователей vim и emacs, у которых есть проблемы с этим утверждением. Даже хардкорные пользователи emacs обычно принимают это как факт. Вы использовали оба редактора? Я считаю, что относительно очевидно, что у vim есть преимущество в аспекте возможностей редактирования текста.
Ладья

36
Я не уверен, что кто-нибудь примет это как факт. Как давний пользователь emacs и обычного VI, я несколько раз использовал vim - но «лучше как редактор» должен подумать о emacs, если не по какой-либо другой причине, кроме гораздо более широкого выбора основных и второстепенных режимов чтобы помочь вам, когда вы печатаете.
Кендалл Хельмштеттер Гелнер

61
Vim лучше, чем редактор, потому что манипулирование текстом требует меньше движений ваших рук и пальцев, чем emacs, по крайней мере, это мой опыт.
StackedCrooked

7
Но кроме этого, эффективно vim лучше подходит для редактирования: номера строк, визуальный режим, манипуляции wint1.kaist.ac.kr/files/attach/images/59/450/… . FCOL, у меня были проблемы с получением emacs просто для прокрутки по одной строке за раз.
Ладья

52

Если вы ищете объективный анализ обоих редакторов, посмотрите на их происхождение и философию их соответствующих проектов. Подумайте, какой из них вам больше подходит, и выучите его (и выучите его, и выучите его, потому что прежде чем вы обнаружите его истинную полезность по сравнению с любой IDE, требуется время). Введение Дисплей Редактирование с Vi была написана Билл Джой и Марк Хортон , и он объясняет , почему он выбрал модальный дизайн и обоснование для различных ключевых ударов (это помогает мне помнить , что CTRL-W + W (перейдет к следующему W indow и ему будет таким же для CTRL W + CTRL W, на тот случай, если вы удерживали клавишу CTRL в течение более длительного времени.

Вот ссылка на временную шкалу Emacs и ссылка на статью Multics Emacs. Вот документ RMS по Emacs , где я вижу упор на программируемый текстовый редактор (даже в 1981 году и ранее).

Я не читал газеты Emacs, но пару раз читал газету Билла Джоя. Оба старые, но все же вы получите философию, и вы можете использовать текущий инструмент (vim 7.x или emacs 25?)

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


43
  1. Vim всегда запускался быстрее, чем Emacs. Я говорю о том, что на любой машине установка Vim из коробки будет запускаться быстрее, чем установка Emacs из коробки. И я склонен думать, что после небольшого количества настроек Vim все равно будет запускаться быстрее, чем Emacs.

  2. После этого другим практическим отличием были моды Emacs. Они значительно упрощают вашу жизнь при редактировании XML, C / C ++ / Java / чего угодно, LaTeX и самых популярных языков, о которых вы только можете подумать. Они заставляют вас хотеть держать редактор открытым для долгих сессий и работы.

В общем, я скажу, что Vim привлекает вас к коротким, быстрым задачам редактирования; в то время как Emacs предлагает вам погрузиться в долгие сессии.


1
Я не думаю, что моды облегчают жизнь, наоборот. И Ларри Теслер думает так же .
Элиран Малка

2
Как режимы Emacs помогают с кодированием? (Я новичок в этом ...)
jvriesem

4
Давным-давно я перешел с vi на emacs по четырем причинам: (a) одним щелчком мыши, чтобы перейти к следующей ошибке компилятора, (b) интеграцией с gdb, (c) grep и find-grep. Можно ли сейчас делать эти вещи в vim?
zzz777

«Vim всегда запускался быстрее, чем Emacs» - если вы продолжаете работать с сервером Emacs, запуск emacs-client очень быстр. У меня есть сценарии для этого, которые я копирую (используя git) на все мои машины. (На самом деле я * также * использую vim; это всегда зависит от того, где я нахожусь, и какова задача)
Jay

«Vim всегда запускался быстрее, чем Emacs» - также, с use-packageего :deferопцией, мой Emacs открывается почти сразу. Я даже отказался от использования emacsclient.
Джей

37

VI всегда доступен и будет работать в наиболее урезанном однопользовательском режиме, с испорченной графикой, без клавиатуры, с медленной связью - поэтому стоит знать, как редактировать в нем простые файлы только для задач sysadmin.

Emacs - это полноценный пользовательский интерфейс в редакторе. Идея состоит в том, что вы запускаете Emacs при запуске машины и никогда не покидаете ее. Можно присутствовать тысячи сессий.

Стоит ли изучать возможности Emacs по сравнению с использованием графического редактора / IDE и использованием чего-то вроде python / awk / etc для дополнительных задач - решать вам.


2
Я знаю VI именно по этим причинам - но сейчас я бы сказал, что вряд ли вы столкнетесь с системой UNIX без хотя бы базовой установки EMACS, и это может сделать плохую среду оболочки более терпимой.
Кендалл Хельмштеттер Гелнер

3
Или вставьте busybox в initrd и отладьте неработающий драйвер хранилища для загрузочного устройства, так что на начальном этапе процесса инициализации все, что у вас есть, это начальный RAM-диск, и все же у вас все еще есть редактор - vi.
Смкамерон

2
Через некоторое время с помощью vi ваши пальцы узнают движения - но вы не можете вспомнить, что это за клавиши!
Мартин Беккет,

10
Я подумал, edчто это «всегда доступно и будет работать в наиболее ограниченном однопользовательском режиме, с испорченной графикой, без клавиатуры, с медленной связью». Подожди, какой это год? (Вздох - edя никогда тебя не забуду.)
belacqua

2
@Kendall: В настоящее время Ubuntu Linux не поставляется с установленным Emacs.
интуитивно

25

Я полноценный фанат Emacs, но я знал VI задолго до того, как знал Emacs. Тем не менее, я заставляю всех своих людей изучать VI, потому что он всегда доступен, везде. Не могу ошибиться ни с одним из них.


2
Это тоже мой опыт ... Emacs или uEmacs никогда не были доступны. Моим первым редактором был uEmacs (на Amiga), но с тех пор как я изучил vim, было слишком удобно иметь его.
Мариус

Это в основном мой опыт тоже. Vi везде и обычно устанавливается как $ EDITOR по умолчанию в системах Unix, поэтому вы должны знать это, если вы работаете с Unix. Тем не менее, я использую emacs для редактирования текста каждый день, и мне это нравится.
Ферги

14

Кажется, ответ уже выбран, но большая разница для меня всегда была модальной и немодальной. Vim является модальным, что означает, что он выполняет оптимизацию на основе определенного набора режимов использования. По крайней мере, так я всегда смотрел на это. Это делает использование Vim другим, потому что вместо рабочей области, в которой вы вводите код, вы действительно указываете среде действовать на текст. Вот почему люди говорят, что с Vim вы действительно изучаете язык. Все: wq и: s / foo / bar являются частью оболочки, похожей на среду, которая редактирует и читает текст.

Emacs, с другой стороны, гораздо ближе к большинству редакторов / текстовых процессоров / и т.д. ты видишь сегодня. У вас есть рабочее пространство с высоко программируемым интерфейсом. Вот почему вы видите такие вещи, как электронная почта, irc, оболочки и т. Д. Как программисту легко представить себе слова «возьми номер строки, на которой я сейчас, и что-то сделай с информацией». Желание покинуть редактор становится меньше, потому что вместо того, чтобы выходить, открывать какое-то другое приложение / язык и делать что-то с текстом, у вас есть Emacs, где вы можете делать эти вещи в рамках вашего редактора.

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


13

Я начал с vi, пошел в emacs, затем в vim. Я думал о том, чтобы попробовать Emacs, чтобы увидеть, что изменилось за последние пять лет. (Говоря об IDE, я некоторое время находился в затмении, но я предпочитаю окно терминала, соединяющее мой mac с моим (мужем) linux box).

Эта штуковина в последнее время беспокоит меня. Вырезать и вставлять в Vim нужно больше шагов, чем в Emacs, IIRC. И вставка из, скажем, браузера в окно терминала раздражает, если вы не делаете что-то необычное, что мне не хочется делать, поэтому я смирился со странным отступом. Я думаю, редактирование нескольких файлов в Emacs было проще. По крайней мере, переходите от одного файла к другому, если они оба находятся на экране.

Я не играл с модными функциями ни vi, ни emacs, так как мне просто нравится заниматься программированием. Все, что мне нужно, это красивые цвета и правильное преобразование табуляции в пространство (особенно важно для Python).

Я думаю, что все зависит от того, хотите ли вы использовать :wqили Ctrl-x Ctrl-s(IIRC) сохранить файл, если вас не волнуют причудливые вещи.

@mgb было правильно. Я был в минимуме Linux, чтобы исправить что-то месяц или два назад в дистрибутиве Debian. vi был единственным доступным редактором.


1
Это все еще не одно и не сделано, но это гораздо проще, чем настроить все настройки, которые портят терминальные вставки. Используйте :set paste, затем вставьте свой текст, и когда вы закончите :set nopaste, вернитесь в нормальный режим. Существует также :set pastetoggle=<F2>команда, которая будет переключать это, используя выбранную вами комбинацию клавиш.
hbar

В режиме отступа вы можете выполнить ^R^P+вставку из буфера обмена и сохранить текущий отступ. ^R^O+упадет отступ. ^R+вставит его так, как если бы вы его напечатали. :help i_^R^Pдля получения дополнительной информации.
интуитивно

3
Я не могу представить, что вырезать / вставить легче, чем yyp. Кроме того, смотрите здесь, чтобы вырезать и вставлять в и из разных окон stackoverflow.com/a/8757876/654789
puk

@puk - Ctrl-k (yank) / Ctr-y (put) в emacs также прост. В Emacs у вас также есть несколько регистров (az), вы можете сохранить либо текст, либо текущую позицию в ...
Кендалл Хельмштеттер Гелнер

3
vim также имеет несколько регистров
TamaMcGlinn

12

На повседневном уровне есть огромная разница - Vim (или любой другой вариант vi) по своей природе модальный (вы переходите в командные режимы, где вы не можете редактировать), а Emacs (как и большинство других редакторов) - нет.

Конечно, используя меню и тому подобное, вам не нужно фактически вводить командный режим в Vim - сначала. Но использовать даже крошечную долю силы Vim вы будете. Это лежит в основе дебатов о Vim / Emacs.

Лично я также считаю, что Emacs гораздо более расширяем. Вы можете найти пакеты Elisp для многих вещей.

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


8
Я просто хочу изучить это, чтобы видеть, выдерживает ли это его обман, честно говоря. Я видел, насколько они оба гибки, и я видел, как эксперты делают в них довольно сумасшедшие вещи, и я хочу посмотреть, стоит ли это кривой обучения. Кроме того, моя IDE не поддерживает Lisp. :)
Саша Чедыгов 15.09.09

3
Хм. Проблема в том, что в Emacs так много ... но я по-прежнему оставляю IDE для использования emacs - это сложные серии повторяющихся задач, которые я автоматизирую с помощью записи макросов. Например, вы можете взять текущее слово или выражение, скопировать его в «буфер» (думаю, вырезать / вставить только вы можете иметь более одного), затем перейти в другой файл, частично набрать текст, используя скопированное значение, а затем другой ранее Также скопируйте значение, переместите курсор, сохраните позицию и вернитесь в первый буфер снова ... затем повторите процесс для следующей строки исходного файла.
Кендалл Хельмштеттер Гелнер

1
Я интенсивно использовал макросы как в vi, так и в Emacs. Что вам не хватает, так это тот факт, что в Emacs имеется гораздо более широкий выбор методов для доступа при использовании макросов, а также тот факт, что вы можете использовать буферы вырезки везде - даже в середине поисковых терминов, например. Скажите, пожалуйста, как бы вы написали макрос, который бы выбирал одно слово выражения на основе регулярного выражения, брал найденный термин, искал другой документ по этому термину и затем заменял его?
Кендалл Хельмштеттер Гелнер

2
@ kendall-helmstetter-gelner - это возможно с vimscript или для языков, к которым имеет привязка vim (например, ruby ​​/ vim / tcl / perl). У вас есть доступ ко всем функциям и буферам редактора vim из языков сценариев.
segy

1
Это впечатляет, но для того, чтобы сделать то же самое в Emacs, нужно использовать только известные мне нажатия клавиш для формирования сложного макроса, а не писать его вручную. Любой, кто знает emacs, может легко создать макрос, который выполняет эту задачу, но я бы сказал, что не так много пользователей VI, которые могли бы построить макет, который вы выложили, без изрядного количества исследований.
Кендалл Хельмштеттер Гелнер

11

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

Я пользуюсь vi / vim уже около 15 лет. Я пытался конвертировать в emacs несколько раз, но каждый раз обнаруживал, что vim на самом деле может сделать недостающую вещь из коробки без необходимости писать расширение для lisp или устанавливать что-то.

Для меня главное отличие редакторов в том, что vim заставляет вас использовать среду / ОС, в то время как emacs пытается инкапсулировать или заменить ее. Например, вы можете добавить дату в тексте как: r! Date в vim, или календарь с помощью: r! Cal 1 2014, или даже заменить содержимое вашего буфера шестнадцатеричной версией содержимого. Например. :%! xxd, отредактируйте hex, а затем вернитесь с:%! xxd -r и многими другими, например, встроенными grep, sed и т. д.

Другой пример - использование с jqи gron. Например. вставьте json blob в редактор и запустите для преобразования:

:r!curl -s http://interesting/api/v1/get/stuff
:%!gron | grep 'interesting' | gron -u

ИЛИ

:%!jq .path.to.stuff

Каждая из вышеприведенных команд может быть запущена отдельно через :%!<command>, где %означает весь документ, но также может быть запущена на выделении, выбранных строках и т. Д. Здесь gron outputможет использоваться как jqпуть.

Вы также получаете функциональность пакетного редактирования EX, например. Замена определенных слов, переформатирование кода, преобразование символов новой строки dos-> unix, запуск макроса, скажем, для 100 файлов одновременно. Это легко сделать с экс. Я не уверен, что в emacs есть что-то подобное.

Другими словами, IMHO vim подходит ближе к философии Unix. Как правило, он проще и меньше, но если вы знаете свою ОС и свои инструменты, вам, скорее всего, не понадобится больше, чем она может предложить (VIM). Я никогда не делаю.

Кроме того, vi является стандартом де-факто в любой системе Unix / Linux, зачем учиться использовать 2 инструмента, которые делают то же самое. Конечно, некоторые системы предлагают мг или что-то подобное, но определенно не все из них. Unix + Vi <3.

Ну, просто мои 5 пенсов.


8
«Vim приближается к философии Unix». - Вы говорите здесь о философии, касающейся инструментов, доступных в вашей оболочке. Сама оболочка, однако, представляет собой большую совокупность встроенных компонентов, истории, глобализации, управления процессами, программируемости и так далее. Emacs явно ближе к философии оболочек Unix: предоставляет гибко настраиваемую среду, в которой инструменты могут использоваться вместе, и позволяет пользователю легко расширять набор инструментов своими собственными фрагментами кода во время их работы. Я думаю, мы можем видеть, что и emacs, и vim имеют глубокие корни в традициях Unix.
Мэтт

1
Спасибо за ваш комментарий. Я ни в коем случае не собирался начинать войну редакторов и не хотел оскорблять пользователей emacs . Я просто нахожу, что проще и более переносимо вызывать реальные команды из оболочки (или из редактора), а не писать сложные расширения для инкапсуляции функциональности в emacs , что со временем приводит к раздутию среды. Эти расширения, однако, зависят от предпочтений пользователя и могут быть выполнены, но ни в коем случае не должны выполняться ни одним из редакторов. Так что согласитесь с вами относительно места emacs и vi (m) в традиции UNIX.
Алекс

1
Просто для продолжения невоенной войны, я надеюсь, было ясно, что я не согласен с вашей аналогией «vim больше похож на инструмент Unix». Мне просто пришло в голову, что эту интуицию можно расширить с помощью «и emacs больше похож на оболочку unix». :-)
Matt

@Matt: мне нравится аналогия. Бог с ним. ;)
Алекс

2
Вы можете делать все, что упоминаете, и многое другое, в emacs (например, hexl-mode подходит для редактирования файла в шестнадцатеричном виде с предварительным просмотром ascii в стороне). Я также довольно хорошо знаю VI, но создание макросов в Emacs намного проще и гибче, и он может сделать намного больше, чем даже большинство современных реализаций VIM. Это причина знать это, потому что emacs находится в большинстве мест и может предложить реальное ускорение редактирования текста.
Кендалл Хельмштеттер Гелнер

10

Для меня плюсы Emacs,

  • tramp-mode позволяет редактировать удаленные файлы через ssh. так же, как локальные файлы.
  • tramp-mode + dired = полнофункциональный клиент sftp
  • поддержка каждого языка, который вам когда-либо понадобится.
  • встроенный эмулятор терминала (term-mode), поэтому я могу сохранять кодирование без переключения между приложениями.
  • расширяемость все, что вам не нравится, вы можете изменить с помощью lisp.

11
FWIW: vim в значительной степени имеет первые 3 (хотя и с разными именами. "Tramp-mode" в vim - "netrw"). # 4 обычно считается ошибкой, а не функцией пользователей vim. № 5 верен в vim, если вы замените «elisp» (худший диалект за всю историю lisp, говорят мне мои любящие Emacs друзья) на python / mzscheme / perl / ruby ​​/ tcl / vimscript.
Лоуренс Гонсалвес

3
Можете ли вы прокомментировать, почему # 4 ошибка?
Хамза Ерликая

2
Проверьте дополнение Conque для встроенной оболочки в vim.
интуитивно


9

Я хотел бы привести цитату из книги «Искусство программирования в UNIX»:

Многие люди, которые регулярно используют и vi, и Emacs, склонны использовать их для разных целей, и им полезно знать и то, и другое.

В общем, vi лучше всего подходит для небольших работ - быстрых ответов на почту, простых настроек конфигурации системы и т. П. Это особенно полезно, когда вы используете новую систему (или удаленную по сети) и не имеете удобных файлов настроек Emacs.

Emacs имеет свои собственные возможности для расширенных сеансов редактирования, в которых вам приходится обрабатывать сложные задачи, изменять несколько файлов и использовать результаты других программ во время сеанса. Для программистов, использующих X на своей консоли (что типично для современных Unixes), нормально запускать Emacs вскоре после времени входа в систему в большом окне и оставлять его работать вечно, возможно, посещая десятки файлов и даже запуская программы в нескольких под окнах Emacs.

Здесь я хочу подчеркнуть следующее: « Многие люди считают полезным знать и то и другое ».


Это, вероятно, устарело. Я думаю, что в то время встроенная способность Emacs иметь браузер, SSH, музыкальный проигрыватель и медленные системы, которые перестали запускать другие приложения, заставила поверить, что лучше открыть одно приложение и придерживаться его?
Nishant

Отличная новость: она не устарела! Вы можете использовать Браузер, Музыкальный проигрыватель и т. Д. Вне Emacs, но на самом деле Emacs предлагает такой же хороший интерфейс для всех этих функций и единственный способ (Elisp) их расширить.
Андрей Тихонов

По моему мнению, взгляды TAUP на Emacs устарели, потому что в те дни у Emacs было преимущество иметь его, так как это было одно запущенное приложение, которое могло одновременно выполнять несколько задач - например, irc, музыка, удаленное редактирование и т. Д. Однако сегодня у вас есть отличные приложения для каждой из этих целей, и память не является проблемой, как раньше ... Представьте себе, что вы читаете Gmail в Emacs - я имею в виду, что интерфейс Gmail действительно имеет встроенные сочетания клавиш, настраивая их в Emacs Email Client. занимает много времени и может быть не так хорош, как оригинальный интерфейс Gmail и т. д.
Nishant

Это не устарело! :)
Андрей Тихонов

> Однако сегодня у вас есть отличные приложения для каждой из этих целей. Да, но у вас есть все эти приложения с очень разными интерфейсами, конфигурациями, пользовательским интерфейсом и т. Д. И т. Д. И т. Д. ... Но Emacs - это один инструмент! Например, мне очень нравятся привязки клавиш Emacs, я использую их в оболочке в браузере. И очень хорошо, что по крайней мере некоторые вещи одинаковы в приложениях ...
Андрей Тихонов

9

Преимущества Emacs

  • Emacs имеет как немодальный интерфейс (по умолчанию), так и модальный (например, он может эмулировать vim и vi через Evil, Viper или Vimpulse).

  • Одна из самых портированных компьютерных программ. Он работает в текстовом режиме и под графическим интерфейсом пользователя в самых разных операционных системах, включая большинство Unix-подобных систем (Linux, различные BSD, Solaris, AIX, IRIX, macOSetc.), MS-DOS, Microsoft Windows, AmigaOS, и OpenVMS. Системы Unix, как бесплатные, так и проприетарные, часто предоставляют Emacs в комплекте с операционной системой.

  • Архитектура сервера Emacs позволяет нескольким клиентам подключаться к одному и тому же экземпляру Emacs и совместно использовать список буферов, список уничтожений, историю отмен и другие состояния.

  • Распространенная интерактивная справочная система с привязками клавиш, функциями и командами, документированными на лету.

  • Расширяемый и настраиваемый вариант языка программирования Lisp (Emacs Lisp) с функциями, которые включают в себя:

  • Мощный и расширяемый файловый менеджер (dired), встроенный отладчик, а также большой набор средств разработки и других инструментов.

  • Наличие каждой команды как функции Emacs Lisp позволяет командам DWIM (делать то, что я имею в виду), программно реагируя на прошлые действия и состояние документа. Например, команда switch-or-split-window может переключиться на другое окно, если оно существует, или создать его при необходимости. Это сокращает количество нажатий клавиш и команд, которые пользователь должен запомнить.

  • "ОС внутри ОС". Emacs Lisp позволяет программировать Emacs далеко за пределы возможностей редактирования. Даже базовая установка содержит несколько десятков приложений, включая два веб-браузера, программы чтения новостей, несколько почтовых агентов, четыре IRC-клиента, версию ELIZA и множество игр. Все эти приложения доступны везде, где работает Emacs, с одинаковым пользовательским интерфейсом и функциональностью. Начиная с версии 24, Emacs включает в себя менеджер пакетов, что упрощает установку дополнительных приложений, включая альтернативные веб-браузеры, EMMS (Emacs Multimedia System) и многое другое. Также доступны многочисленные пакеты для программирования, включая некоторые, предназначенные для определенных комбинаций языка / библиотеки или стилей кодирования.

Преимущества vi-подобных редакторов

  • Команды редактирования являются составными
  • Vi имеет модальный интерфейс (который Emacs может эмулировать)
  • Исторически, 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.
  • Среды восстановления системы, встроенные системы (особенно с занятой коробкой) и другие ограниченные среды часто включают в себя vi, но не emacs.

Источник: https://en.wikipedia.org/wiki/Editor_war


7

Теперь вам даже не нужно думать о разнице между этими двумя из-за Spacemacs . Это управляемый сообществом дистрибутив Emacs.

Как сказано,

Лучший редактор - это ни Emacs, ни vim, это Emacs и Vim.

Spacemacs сочетает в себе лучшее из Emacs и Vim, что значительно облегчает вашу жизнь и работу.

Смотрите скриншот ниже,


(источник: spacemacs.org )


3
Это обман ... Это emacs с некоторыми прикольными конфигами;) На самом деле довольно много конфигов
Alex

2
Это здорово - когда это работает. Когда это не так - если вы еще не знаете elisp и emacs или не можете найти основных участников в gitter chat - вы обычно застряли и не повезло. (иногда удаление вашего каталога melpa в .emacs может исправить ситуацию ...)
Аарон Холл

1
Хотя в нем гораздо больше вещей, чем мне нужно, я действительно доволен Spacemacs. У меня есть мои точечные файлы на github, так что я могу легко / быстро устанавливать новые машины, и, поскольку я использую злые (привязки клавиш vim), у меня достаточно навыков, чтобы справиться с ними, когда мне приходится работать на машинах, где я не могу установить конфигурацию spacemacs.
anr78

6

Самым большим отличием для меня при выборе emacs над vim была встроенная поддержка gdb в emacs. Vim не включил это в свой дистрибутив по умолчанию, и проект по интеграции gdb и vim был почти невозможен для работы с MacVim.


1
Я использовал Vim для редактирования и Xcode для отладки, это не идеально, но выполнимо.
StackedCrooked

4

Это как яблоки и апельсины. Оба имеют разный дизайн и философию. Vim - это текстовый редактор, а Emacs - интерпретатор Lisp, который выполняет редактирование текста.

Я использую Vim, потому что он быстрый, изящный и действительно хорош в манипулировании текстами. Он имеет составную естественную привязку ключей, которая может сделать ваши задачи разработки действительно гармоничными. Vim основан на простой * nix philiosphy, делающей одну вещь действительно хорошо - то есть манипулирование текстом.

Расширение Vim с использованием bash / zsh и tmux обычно легко и позволяет многому научиться. ИМХО это хорошая кривая обучения. Главное - научиться интегрировать эти вещи, чтобы получить большее работающее приложение. С Vim вам нужно изучить интеграцию, потому что она не интегрируется естественным образом, если вы не скажете, как это сделать. Еще одно стоящее расширение, которое я использую, это Tig. Это основанный на ncurses интерфейс Git. У меня просто есть привязка, которая молча открывает Tig, а затем я делаю там все Git.

Это до конечного пользователя, чтобы решить, что работает лучше всего. То, что Emacs и Vim выдержали испытание временем, является доказательством их достоинства. В конце концов, хорошему программисту для творчества нужны только ручка и бумага. Хорошие алгоритмы не нуждаются в редакторах для их поддержки. Попробуйте оба и посмотрите, что делает вас более продуктивным. И изучите шаблоны проектирования от этих двух программ, поскольку есть много, чтобы изучить и обнаружить!


4

В Emacs есть режим viper, поэтому в некотором смысле он предоставляет расширенный набор функций (за исключением тех, которые описаны в разделе «Какие функции Vim отсутствуют в Emacs с Viper и Vimpulse?» ).

vi (и VIM IIRC) имеет меньший вес (он может редактировать файлы на месте), но предлагает меньше функций (взаимодействие подпроцесса, язык расширения).


3

Emacs - это больше всего программа для всего , а vi (m) - это просто редактор. Если вы редактируете текст, они оба хороши, но я предпочитаю emacs просто потому, что мне нужно сдвинуть одну строку с домашнего ряда для перемещения и продолжать вводить неправильные вещи в командном режиме. Если у вас нет этой проблемы, vi (m) может быть редактором для вас.


2

Желтучая точка зрения:

vi (не vim) - это профессиональная необходимость. У вас всегда есть какая-то легко доступная форма vi, независимо от среды. Вы можете быть в vi, когда в emacs, вы можете быть в vi, чтобы создавать команды bash в unix-land.

Даже Microsquish должен поддерживать vi (хотя они и умеют скрывать его) из-за государственного и корпоративного соответствия опубликованным стандартам.

По моему мнению, если вы занимаетесь практической работой в напряженной обстановке, а не в тепличных цветах, приуроченных к одному причудливому оборудованию в среде разработки или в академических кругах, - много знать о причудливом редакторе - это препятствие для работы. Не изучайте все хитрые приемы в vim или emacs и не разрабатывайте кучу макросов, чтобы заставить среду редактирования подчиняться вашей воле. Это огромная трата времени, которая встает у вас на пути, когда вы занимаетесь различными машинами, которые вы, вероятно, не можете оправдать в заводских условиях.

Прочитайте статью Билла Джоя - это очень компетентное, возможно, даже красивое, инженерное упражнение по редактированию простого текста очень, очень быстро. Здесь действует правило Парито: 80% фруктов находится в 20% корзин. Редактирование простого текста очень и очень быстро - суть компетенции в редактировании - все остальное необязательно - и иногда вредно.


3
О какой газете ты говоришь? Можешь хотя бы дать имя, если не ссылку?
Darkfeline

2
«Даже MS должен поддерживать vi». Вы можете это подтвердить?
dodgethesteamroller

1

Если вы много перемещаетесь с сайта на сайт или ваша работа связана с входом в производственные системы, тогда vim - это то, что вам нужно.

На всех машинах * nix vi будет установлена ​​по умолчанию.

Большинство системных администраторов предпочитают ksh в качестве оболочки по умолчанию. ksh использует комбинации клавиш vi (или emacs) для поиска в истории и редактирования командной строки.

Если вы плохо знаете vi, у вас серьезные недостатки, когда вы входите в окно Unix со стандартной конфигурацией.

Только по этой причине я бы порекомендовал vim в качестве вашего обычного редактора на каждый день. Я видел фанатов emacs, которые пытались исправить конфигурационные файлы на сервере unix.


1
Для bash попробуйте использовать set -o viв вашем .bashrc, вместо того set -o emacs, который используется по умолчанию. Я никогда не использовал ksh, но это может быть то же самое.
sjas

1

В своем вопросе вы не упомянули, что хотите, чтобы он программировался на Лиспе! Но когда вы комментировали свои ответы, я понял, что вам действительно нужен интерфейс программирования LISP.

Для этого точного задания просто забудьте о Vi. Интеграция Emacs с LISP замечательна! Вы должны использовать SLIME. Тогда у вас будет прекрасная интеграция с REPL, и вы сможете выполнять evalфункции, буферы или файлы непосредственно в работающем интерпретаторе в буфере emacs и многое другое ...


1
Да, я знаю об этом, но поиск достойного редактора Lisp не был моей причиной для того, чтобы задать этот вопрос - это был только пример. Спасибо за ответ, хотя!
Саша Чедыгов

1

Я работал с spacemacs около 2 лет и neovim уже около года в производственной / исследовательской среде. Spacemacs - это emacs с несколькими приятными дополнительными функциями, такими как слои и т. Д. И neovim снова является форком vim с некоторыми дополнительными функциями.

Я совершенно недоволен ими обоими с точки зрения опыта. И я все еще ищу долгосрочное решение для моих потребностей в редактировании текста.

Вот простое сравнение:

  • Neovim, vim, emacs, spacemacs и т. Д. Все эти редакторы потребляют меньше ресурсов по сравнению с большинством редакторов.

  • Neovim / vim немного быстрее, чем emacs, заметно быстрее, чем spacemacs.

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

  • Vimscript хорош и, безусловно, есть отличные проекты в экосистеме vim. Хорошо, что они лучше задокументированы, чем большинство проектов emacs, которые я видел до сих пор.

  • Оба могут быть затруднены в зависимости от пакета, который вы используете. Spacemacs, как правило, зависает, а neovim, как правило, отображает страшные сообщения об ошибках, так что выбирайте яд там.

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


1
«Модальное редактирование (...), как только вы к этому привыкнете, вы хотите, чтобы это было всегда» - это интересно. Я потратил годы, используя Emacs со злым режимом, и привык к модальному редактированию, а теперь вернулся к немодальному ... Это просто лучше. Я думаю, что это зависит не только от человека, но и от контекста / времени в жизни / чего бы то ни было. Вкус, я полагаю. :)
Джей

1
@ Джей, я думаю, но ты не скучаешь, например, выбор столбцов и прыгать с ": XX"?
Каан Э.

Не совсем ... Я иногда использую выделение прямоугольников в Emacs, и вместо: xx я делаю "Mg g XX" - еще несколько нажатий клавиш, но мне редко нужно идти прямо к строке. Обычно приложение Emacs (отладчик и т. Д.) Отправляет меня в нужную строку.
Джей

0

Выполнение нажатия клавиши ::: редактирование vi сохраняет каждую перестановку набранных ключей. Это создает путь в дереве решений, который однозначно идентифицирует любую команду, в то время как команды Emacs представляют собой комбинацию типизированных ключей, выполняемых немедленно, что оставляет пользователю возможность выбора, использовать ли команду.

Использование памяти и настраиваемость ::: vi - это небольшая и более быстрая программа с более ограниченными возможностями для настройки, тогда как Emacs требует больше времени для запуска и требует больше памяти. Тем не менее, он легко настраивается и включает в себя большое количество функций, так как по сути это среда выполнения для программы на Лиспе, предназначенной для редактирования текста.


0

vim - удобный редактор, вы просто набираете, vim filenameчтобы открыть файл, отредактировать, сохранить и закрыть.

emacs - это «операционная система», притворяющаяся редактором, вы можете evalкодировать, чтобы изменить его поведение, и расширять его по своему усмотрению. modeПолучить / отправить по электронной почте на Emacs похожа на программное обеспечение электронной почты в операционной системе.

При простом редактировании, например, изменении файла конфигурации, я использую vim .

В противном случае я никогда не покину Emacs .


0

Я думаю, что основным отличием является цель дизайна. VIM для UNIX в качестве рабочего редактора. Emacs предназначен для хакеров GNU и lisp, поэтому в нем есть какой-то смешанный элемент дизайна.

Я использую vim на своей рабочей станции, а также люблю emacs.


0

Я фанат Emacs, но призываю других разработчиков изучать VI, потому что:

  1. Вы можете использовать VI для редактирования make-файлов emacs.
  2. VI включает команды ed, и каждый пользователь UNIX должен знать ed и sed.

Я заметил несколько комментариев о том, что VIM запускается быстрее, чем emacs. Если вас это действительно волнует, запустите emacs в режиме сервера и введите псевдоним 'emacs' в 'emacsclient'. Клиент работает очень быстро, поскольку все, что он делает, - это нажимает на сервер по плечу и сообщает ему, какой файл вы хотите редактировать. В MacOSX emacsclient составляет всего 33K, а emacs - 287M.

Я не уверен, что все это необходимо на современном оборудовании. На моем MacBook Pro (Retina 2013) emacs загружается почти мгновенно, когда я запускаю его из оболочки. Я не вижу никакой паузы вообще. Когда я запускаю Emacs.app (версия с графическим интерфейсом), это может занять все 3 секунды.

Большинство жалоб, которые я слышу о emacs, похоже, поступают от людей, дезинформированных о emacs. Используя 1982 и vi, и emacs с 1982 года, я точно помню время, когда emacs загружался намного медленнее, чем vi, и использовал большую часть физической памяти в моих ранних версиях UNIX, но это уже не так и не было по крайней мере 15- 20 лет.

Одна жалоба, которую я должен признать, это "Emacs Pinkie". Это никогда не беспокоило меня, когда я был моложе. Теперь, когда мне 58, мой мизинец немного болит от повторного доступа к клавише Control для записи emacs. Это особенно верно для клавиатуры MacBook Pro, где Control перемещается на одну позицию вправо, чтобы освободить место для клавиши «fn». Это не так раздражает, когда Control - нижняя левая клавиша.


Вы также можете «сбросить» emacs, что в основном означает создание снимка скомпилированных расширений elisp, которые вы хотите. Таким образом, Emacs запускается намного быстрее, но требуется определенное время, чтобы определить, какие расширения вы хотите включить.
Фил Харбисон

Плюс вы можете играть в "Towers Of Hanoi" в Emacs. Как это круто? :)
Фил Харбисон

Re: "Emacs Pinkie". На некоторых старых клавиатурах, например Sun Type 3/4, на которых основан HHKB Professional, элемент управления размещается там, где обычно находится Caps Lock. У меня нет опыта работы с emacs, однако я очень быстро привык к тому, что Control находится в домашнем ряду. Настолько, что я сделал это изменение на всех моих клавиатурах (MacBook Pro тоже). HHKB имеет некоторые дальнейшие улучшения, например, Backspace чуть выше Enter и Esc рядом с 1.
martinweiss

@PhilHarbison может рассказать о «свалке»?
A_P

0

Сначала я пользовался vim, затем переключился на emacs, затем на vim, теперь я снова экспериментирую с emacs.

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

Как разработчики, мы много печатаем, и, наконец, для меня перемещение в буферах и файлах - самая большая повторяющаяся задача, поэтому я хочу редактор, в котором я МОГУ БЫСТРОЕ ПЕРЕМЕЩЕНИЕ!

Мотивация снова поэкспериментировать с emacs заключается в том, что я справился с клавишами Ctrl быстрее, чем vim, и легче рассуждать.

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

В emacs нет режима, в основном вы нажимаете Ctrl розовым цветом и нажимаете клавишу, например Cx Cf, Cx Cs, Cx Cc. Есть комбинации клавиш, где вам нужно отпустить клавишу Ctrl, я ненавижу эти и всегда заменяю их на нажатые клавиши управления.

Я думаю, что подход emacs быстрее думать и печатать, но у vim есть и другая сила. Его команды являются составными, они обычно имеют формат. Например, чтобы удалить строку, которую вы можете использовать dd, чтобы удалить слово dw. Плагины используют этот сруб, с помощью плагина vim -round вы можете удалять цитаты с помощью ds "(delete Surround"), удалять до следующего / dt/. Удалить до предыдущего /: dT/и так далее. Так что, пока вы учитесь, движущиеся вещи начинают становиться очень интересными.

Подводя итог, сегодня я понял, что привязки клавиш emacs быстрее для редактирования макросов, а команды vim более эффективны для микроредактирования

Я использую vim в течение последних пяти лет, поэтому я редактирую, думая в основном о словах, строках, окружении, блоках и т. Д. Удалите эту строку, удалите кавычки, замените кавычки, удалите слово в курсоре, я пытаюсь найти emacs движется для этого

В качестве заключительной цитаты я бы сказал, что меня больше волнует fzf, чем emacs или vim, я хотел бы иметь редактор, полностью основанный на fzf


-9

Во-первых, Vi (оригинальная реализация) сегодня не используется. То, что вы говорите, является неким выводом Vim.

Для расширения функциональности Vim вы должны перекомпилировать Vim, а Emacs - нет.

Emacs имеет Vim в себе (режим viper).

Emacs обычно требует установки вручную, Vim обычно предустановлен на всех Unix-подобных ОС (но если у вас есть доступ по ssh к хост-режиму tramp-win, выиграйте Vim :).

Если вы пробуете Vim, вы ненавидите Emacs, поэтому сначала начните с Emacs.

Также прочитайте http://www.dina.dk/~abraham/religion/vi-tutorial.html (ссылка идет вниз, так что используйте это )

Поиск ответа в hxxp: //en.wikipedia.org/wiki/Editor_war


8
Вам не нужно перекомпилировать vim для его расширения. Вам даже не нужно выходить из Vim.
слишком много php

1
Имеете ли vimscript / Python / Ruby / etc доступ ко всем внутренним структурам Vim? Если кодовая база редактора поможет сделать расширение или сложность расширения на одном уровне сложности EDITOR?
gavenkoa

1
Большая часть сценариев Vim похожа на интеллектуальный MACROS. Для расширения Vim вам нужны плагины ((
gavenkoa

1
Ви не используется?!?! Какая? Nvi считается оригинальным? Или «традиционный ви»? Многие системы, такие как FreeBSD, ArchLinix объединяют традиционные vi или nvi, и я благодарен за это. Некоторые системы, такие как Debian, работают с vim, который по умолчанию находится в совместимом режиме (кажется, почти как традиционный vi)
Alex

1
@gavenkoa, я абсолютно согласен с Алексом, вы, очевидно, никогда не пробовали систему, требующую ручной установки, такую ​​как Gentoo, некоторые BSD или Arch Linux. Также: «Если вы попробуете Vim, вы ненавидите Emacs, поэтому сначала начните с Emacs». заставил бы меня сначала попробовать VIM, и тебя тоже, если немного подумать. Это напоминает мне о людях, которые говорят, что не стоит сначала пробовать функциональное программирование. Мне грустно, что я не попробовал это раньше ...
JMCF125
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.