Qual è la differenza tra le diverse implementazioni di Vim?


25

Sono a conoscenza di diverse implementazioni vim in Emacs. C'è modalità malvagia, vipera, vimpulse e modalità vim. Ce ne sono altri? Come si confrontano?

Noto che ci sono molti evil-*pacchetti su MELPA, suggerendo che nessuno di essi è completo al 100%. Quali funzionalità di vim forniscono e quali funzioni di vim mancano?

(Non mi interessa il contrario in cui " un insieme di macro vi che [sono] un'implementazione Emacs abbastanza completa "!)


1
Forse le "emulazioni" sarebbero più corrette e meno confuse dato che l'obiettivo delle modalità elencate è darti il ​​comportamento che desideri, non implementare un intero editor sopra Emacs.
Wasamasa,

Risposte:


35

vi, vipE viper(in ordine di data di creazione) vengono incorporati con Emacs, tutti quelli emulare VI. vim-modeè uno sforzo nuovo e autonomo per emulare effettivamente Vim, vimpulseè un insieme di extra viperper dare una delle funzionalità Vim più utili. evilè stato creato in sostituzione di vim-mode.

evilè il progetto più recente e l'unico sviluppato attivamente. Il suo obiettivo è emulare fedelmente il modello di editing di Vim, sfruttando le funzionalità Emacs esistenti ovunque possibile. Personalmente direi che è completo per circa il 90%, poiché gnmancano alcuni comandi newish (come ), alcune funzionalità relative alla visualizzazione sono abbastanza difficili da ricreare (come la visualizzazione delle tilde dopo la fine di un file) e non implementano un interprete di Vimscript o qualsiasi cosa al di là delle basi della modalità Ex. Tuttavia, è più facile da estendere e introspeggiare rispetto all'originale, le evil-*estensioni sono gli Emacs equivalenti ai plug-in Vim in quasi tutti i casi ( evil-leaderad esempio sarebbe un'eccezione perché non è necessario offrire considerando il supporto della keymap Emacs).

Considerando che evilsta superando Vim in alcuni punti (vedi :se la sua anteprima visiva o quanto poco sforzo crea una nuova modalità utile ), lo consiglio vivamente a tutti coloro che sono interessati all'editing modale di Emacs.


Hai detto di g/essere un comando newish in Vim. Non l'ho mai visto e non riesco a trovare alcuna documentazione su di esso. Cosa fa in Vim?
Ivan

Mi dispiace, intendevo dire gn. Trasforma i risultati della ricerca in un oggetto di testo. Inoltre, è stato implementato ormai.
wasamasa,

Ah, capisco. Sono contento di sapere che è stato implementato mentre lo uso un po 'in Vim.
Ivan

9

Poiché evilè l'unica modalità di emulazione vim sviluppata attivamente per quanto ne sappia, farò la mia risposta specifica per il male. evilè altamente utilizzabile e molto vicino a un'esperienza simile a vim, ma ci sono alcune funzionalità di vim che molto probabilmente non verranno implementate (in base alla progettazione) e alcune che sono incomplete ma potrebbero essere aggiunte alla fine. Alcuni esempi di cose che molto probabilmente non verranno aggiunti:

  1. Non esiste un interprete di vimscript e, per quanto ne sappia, non ho intenzione di implementarlo.
  2. I numeri in aumento e in diminuzione ( C-ae C-x) non verranno aggiunti perché C-xè troppo importante per l'associazione di un tasto Emacs.
  3. Non esiste un concetto integrato di chiave leader; invece, \è associato per evil-execute-in-emacs-stateimpostazione predefinita.
  4. C-unon è obbligato a scorrere verso l'alto per impostazione predefinita perché è troppo importante come associazione di tasti Emacs (sebbene sia possibile sovrascriverlo con evil-want-C-u-scroll).

Per trovare un elenco di funzionalità vim non ancora implementate (al momento della stesura di questa risposta), il posto migliore dove cercare è il tracker dei problemi . Un campionamento casuale di cose che sono nella lista:

  1. L'aggiunta di un file con exnon è implementata .
  2. Alcuni comandi di movimento non si comportano come vim .
  3. :makenon è mappato aM-x compile .
  4. C-oin insertmodalità non si comporta esattamente come in vim .
  5. I buffer delle finestre di swap non sono implementati .

Ce ne sono molti altri, inclusi i comandi che non sono nella lista dei problemi aperti (in particolare i excomandi complicati ), ma come puoi vedere dalla lista tendono ad essere funzioni vim piuttosto lievi o oscure (vim è un obiettivo piuttosto grande con cui raggiungere il 100% di parità di funzionalità).


poiché emacs usa lisp. niente è impossibile. per esempio, sebbene la chiave leader non sia integrata, puoi installare un plugin malvagio leader.
chen bin,

@chenbin ovviamente, mi riferivo solo a cose che sono integrate e abilitate di default con il male.
shosti,

3

L'obiettivo di Evil è emulare Vim, mentre l'obiettivo di Viper è emulare Vi. Vim-mode e Vimpulse sono i predecessori di Evil e per quanto ne so non sono più sviluppati. Il progetto Evil è stato avviato per affrontare le carenze di questi progetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.