Яка різниця між різними реалізаціями vim?


25

Мені відомо кілька різних реалізацій vim в Emacs. Є злий режим, гадюка, вимпульс і режим вім. Є інші? Як вони порівнюються?

Зауважу, що evil-*на MELPA є багато пакетів, що дозволяє припустити, що жоден з них не є на 100% повним функціональним елементом. Які функції vim вони надають, а які функції vim відсутні?

(Мене не цікавить реверс, де " набір vi макросів, які [є] досить повною реалізацією Emacs "!)


1
Можливо, "емуляції" були б більш правильними та менш заплутаними, оскільки мета перелічених режимів - це поведінка, яку ви хочете, не впроваджуючи цілого редактора поверх Emacs.
wasamasa

Відповіді:


35

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

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

Враховуючи evil, що перевершує Vim у точках (див. :sТа його візуальний попередній перегляд або як мало зусиль для створення корисного нового режиму ), я від усієї душі рекомендую його всім, хто цікавиться модальним редагуванням для Emacs.


Ви згадували про g/те, що ви новим командою у Vim. Я ніколи його не бачив і не можу знайти жодної документації на нього. Що це робить у Vim?
Іван

Вибачте, я мав на увазі gn. Це перетворює результати пошуку в текстовий об’єкт. Крім того, він уже реалізований.
wasamasa

А, бачу. Я радий почути, що це було реалізовано, оскільки я досить часто його використовую у Vim.
ivan

9

Оскільки evilє моїм відомим єдиним активно розробленим режимом емуляції vim, я зробить свою відповідь злим. evilє дуже корисним і дуже близьким до подібного досвіду, але є деякі функції vim, які, швидше за все, не будуть реалізовані (за задумом), а також деякі, які є неповними, але можуть бути додані з часом. Деякі приклади речей, які, швидше за все , не будуть додані:

  1. Немає перекладача вимскрипту, і наскільки мені відомо, не планується його реалізувати.
  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% паритету ознак).


оскільки emacs використовує lisp. немає нічого неможливого. наприклад, хоч ключ лідера не вбудований, ви можете встановити плагін зла-leader.
Чень Бін

@chenbin, звичайно, я просто мав на увазі речі, які вбудовані та включені за замовчуванням із злом.
shosti

3

Мета зла - наслідувати Віма, тоді як мета Війпера - наслідувати Ві. Vim-mode і Vimpulse є попередниками Зла і, наскільки мені відомо, більше не розвивалися. Проект Зло було розпочато для усунення недоліків цих проектів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.