В чем разница между различными реализациями vim?

25

Мне известно о нескольких различных реализациях vim в Emacs. Есть злой режим, viper, vimpulse и vim-mode. Есть ли другие? Как они сравниваются?

Я отмечаю, что evil-*на MELPA есть много пакетов, и предполагается, что ни один из них не является на 100% полнофункциональным. Какие функции Vim они предоставляют, и какие функции VIM отсутствуют?

(Меня не интересует обратное, где « набор макросов vi, которые [являются] довольно полной реализацией Emacs »!)

Уилфред Хьюз
источник
1
Возможно, «эмуляция» будет более правильной и менее запутанной, поскольку цель перечисленных режимов - дать вам желаемое поведение, а не реализовывать весь редактор поверх Emacs.
Васамаса

Ответы:

35

vi, vipИ viper(упорядоченные по дате создания) приходят встроенные с Emacs, все те эмулировать VI. vim-modeэто новая, самостоятельная попытка фактически эмулировать Vim, vimpulseэто набор дополнительных функций, viperкоторые предоставляют одну из самых полезных функций Vim. evilбыл создан как замена vim-mode.

evilэто самый последний и единственный активно развивающийся проект. Его цель - добросовестно эмулировать модель редактирования Vim, максимально используя существующие возможности Emacs. Лично я бы сказал, что он выполнен примерно на 90%, потому что несколько новых команд (таких как gn) отсутствуют, некоторые функции, связанные с отображением, довольно трудно воссоздать (например, отображение тильд после конца файла), и они не реализуются. интерпретатор Vimscript или что-то кроме основ Ex-режима. Однако его легче расширять и анализировать, чем оригинал, evil-*расширения являются Emacs-эквивалентами плагинов Vim почти во всех случаях ( evil-leaderнапример, это будет исключение, потому что нет необходимости предлагать, учитывая поддержку Emacs keymap).

Учитывая, evilчто в некоторых моментах он превосходит Vim (см. :sЕго визуальный предварительный просмотр или то, как мало усилий создает создание нового полезного режима ), я искренне рекомендую его всем, кто интересуется модальным редактированием для Emacs.

wasamasa
источник
Вы упомянули, g/что были новой командой в Vim. Я никогда не видел его и не могу найти никакой документации по нему. Что это делает в Vim?
Иван
Извини, я имел ввиду gn. Превращает результаты поиска в текстовый объект. Кроме того, это уже реализовано.
Васамаса
Ах я вижу. Я рад слышать, что это было реализовано, поскольку я использую его в Vim.
Иван
9

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

  1. Интерпретатора vimscript нет, и, насколько мне известно, нет планов его реализации.
  2. Увеличивающиеся и уменьшающиеся числа ( C-aи C-x) не будут добавлены, потому что C-xэто слишком важно для привязки клавиш Emacs.
  3. Нет встроенной концепции ключа лидера; вместо этого \он связан с evil-execute-in-emacs-stateпо умолчанию.
  4. C-uне ограничен прокруткой по умолчанию, потому что это слишком важно, как привязка клавиш Emacs (хотя вы можете перезаписать это с помощью evil-want-C-u-scroll).

Чтобы найти список функций vim, которые еще не реализованы (на момент написания этого ответа), лучше всего искать средство отслеживания проблем . Случайная выборка вещей, которые есть в списке:

  1. Добавление файла с exне реализовано .
  2. Некоторые команды движения не ведут себя как vim .
  3. :makeне отображается наM-x compile .
  4. C-oв insertрежиме не ведет себя так, как в vim .
  5. Перестановка оконных буферов не реализована .

Есть еще много, в том числе команды, которых нет в списке открытых проблем (особенно сложные exкоманды), но, как вы можете видеть из списка, они имеют тенденцию быть довольно незначительными или скрывать функции vim (vim - довольно большая цель, с которой достичь 100% паритета характеристик).

shosti
источник
Поскольку Emacs использует LISP. Невозможное возможно. например, хотя ключ лидера не встроен, вы можете установить плагин evil-leader.
Чен бин
@chenbin, конечно, я имел в виду вещи, которые встроены и включены по умолчанию со злом.
Шости
3

Цель Зла - подражать Виму, а цель Гадюки - подражать Ви. Vim-mode и Vimpulse являются предшественниками зла и, насколько мне известно, больше не развиваются. Злой проект был начат для устранения недостатков этих проектов.

tmalsburg
источник