Jaka jest różnica między różnymi implementacjami vima?

25

Jestem świadomy kilku różnych implementacji vima w Emacsie. Istnieje tryb zły, viper, vimpulse i vim-mode. Czy są jeszcze inni? Jak oni się porównują?

Zwracam uwagę, że evil-*na MELPA jest wiele pakietów, co sugeruje, że żaden z nich nie jest w 100% kompletny. Jakie funkcje vim zapewniają i jakich funkcji vim brakuje?

(Nie interesuje mnie sytuacja odwrotna, w której „ zestaw makr vi, które są [dość] pełną implementacją Emacsa ”!)

Wilfred Hughes
źródło
1
Być może „emulacje” byłyby bardziej poprawne i mniej mylące, ponieważ celem wymienionych trybów jest zachowanie pożądanego zachowania, a nie wdrażanie całego edytora na Emacsie.
wasamasa

Odpowiedzi:

35

vi, vipI viper(sortowane według daty utworzenia) pochodzą z wbudowanym Emacs, wszystkie te naśladować VI. vim-modejest nowszym, samodzielnym wysiłkiem, aby faktycznie emulować Vima, vimpulsejest zestawem dodatków viperzapewniających jedną z najbardziej przydatnych funkcji Vima. evilzostał utworzony jako zamiennik dla vim-mode.

eviljest najnowszym i jedynym aktywnie rozwijanym projektem. Jego celem jest wierna emulacja modelu edycji Vima, wykorzystanie istniejącej funkcjonalności Emacsa, gdzie tylko jest to możliwe. Osobiście powiedziałbym, że jest ukończony w około 90%, ponieważ gnbrakuje kilku nowych poleceń (takich jak ), niektóre funkcje związane z wyświetlaniem są dość trudne do odtworzenia (jak wyświetlanie tyldy po zakończeniu pliku) i nie implementuje interpreter Vimscript lub cokolwiek poza podstawami trybu Ex. Jednak łatwiejsze do rozszerzenia i introspekcji niż oryginalne, evil-*rozszerzenia są w Emacsie odpowiednikami wtyczek Vima w prawie wszystkich przypadkach ( evil-leaderna przykład byłby wyjątkiem, ponieważ nie jest konieczne oferowanie rozważania obsługi mapy klawiszy Emacsa).

Biorąc pod uwagę, że evilprzewyższa Vima w punktach (patrz :si jego wizualny podgląd lub jak mało wysiłku tworzy użyteczny nowy tryb ), z całego serca polecam go wszystkim zainteresowanym edycją modalną dla Emacsa.

wasamasa
źródło
Wspomniałeś, g/że jesteś Vimem jako nowicjusz. Nigdy go nie widziałem i nie mogę znaleźć na nim żadnej dokumentacji. Co robi w Vimie?
ivan
Przepraszam, miałem na myśli gn. Zamienia wyniki wyszukiwania w obiekt tekstowy. Ponadto został już wdrożony.
wasamasa
O, rozumiem. Cieszę się, że został zaimplementowany, ponieważ używam go dość często w Vimie.
ivan
9

Ponieważ evilwedług mojej wiedzy jest to jedyny aktywnie rozwijany tryb emulacji vim, moja odpowiedź będzie zależała od zła. eviljest wysoce użyteczny i bardzo podobny do vim, ale istnieją pewne funkcje vim, które najprawdopodobniej nie zostaną zaimplementowane (zgodnie z projektem) i niektóre, które są niekompletne, ale mogą zostać w końcu dodane. Niektóre przykłady rzeczy, które najprawdopodobniej nie zostaną dodane:

  1. Nie ma tłumacza vimscript, a według mojej wiedzy nie ma planów jego wdrożenia.
  2. Zwiększanie i zmniejszanie liczb ( C-ai C-x) nie zostanie dodane, ponieważ C-xjest to zbyt ważne w przypadku skrótów klawiszowych Emacsa.
  3. Nie ma wbudowanej koncepcji klucza wiodącego; zamiast tego \jest evil-execute-in-emacs-statedomyślnie związany.
  4. C-unie jest domyślnie przewijany w górę, ponieważ jest zbyt ważny jako skrót klawiszowy Emacsa (chociaż można to zastąpić evil-want-C-u-scroll).

Aby znaleźć listę funkcji vima, które nie zostały jeszcze zaimplementowane (w momencie pisania tej odpowiedzi), najlepszym miejscem do wyszukiwania jest narzędzie do śledzenia problemów . Losowe próbkowanie rzeczy znajdujących się na liście:

  1. Dołączanie pliku z exnie jest zaimplementowane .
  2. Niektóre polecenia ruchu nie zachowują się jak vim .
  3. :makenie jest mapowany naM-x compile .
  4. C-ow inserttrybie nie zachowuje się tak jak w vimie .
  5. Bufory okien wymiany nie są zaimplementowane .

Istnieje wiele innych, w tym polecenia, które nie znajdują się na otwartej liście problemów (szczególnie skomplikowane expolecenia), ale jak widać z listy, są to zwykle niewielkie lub niejasne funkcje vim (vim jest raczej dużym celem, z którym można osiągnąć 100% parzystości funkcji).

shosti
źródło
ponieważ emacs używa lisp. nic nie jest niemożliwe. na przykład chociaż klucz lidera nie jest wbudowany, możesz zainstalować wtyczkę złego lidera.
chen bin
@chenbin, oczywiście, miałem na myśli tylko rzeczy wbudowane i domyślnie włączone ze złem.
shosti
3

Celem Zła jest naśladowanie Vima, podczas gdy celem Vipera jest naśladowanie Vi. Tryb Vim i Vimpulse są poprzednikami Zła i według mojej wiedzy nie są już rozwijane. Projekt Evil został rozpoczęty w celu usunięcia niedociągnięć tych projektów.

Tmalsburg
źródło