Qual é a diferença entre as diferentes implementações do vim?

25

Estou ciente de várias implementações diferentes do vim no Emacs. Existe o modo maligno, o viper, o vimpulse e o modo vim. Existem outros? Como eles se comparam?

Observo que há muitos evil-*pacotes no MELPA, sugerindo que nenhum deles é 100% completo. Quais recursos do vim eles fornecem e quais recursos do vim estão ausentes?

(Não estou interessado no inverso, onde " um conjunto de vi macros que são uma implementação bastante completa do Emacs "!)

Wilfred Hughes
fonte
11
Talvez as "emulações" sejam mais corretas e menos confusas, pois o objetivo dos modos listados é dar o comportamento que você deseja, não implementar um editor inteiro no Emacs.
Wasamasa 16/10

Respostas:

35

vi, vipe viper(ordenados pela data de criação) são integrados ao Emacs, todos emulando VI. vim-modeé um esforço mais novo e independente para simular o Vim, vimpulseé um conjunto de extras viperpara oferecer um dos recursos mais úteis do Vim. evilfoi criado como substituto para vim-mode.

evilé o projeto mais recente e o único desenvolvido ativamente. Seu objetivo é emular fielmente o modelo de edição do Vim, aproveitando a funcionalidade existente do Emacs sempre que possível. Pessoalmente, eu diria que está cerca de 90% completo, porque gnfaltam alguns comandos recentes (como ), algumas funcionalidades relacionadas à exibição são difíceis de recriar (como a exibição de tildes após o final de um arquivo) e não são implementadas um intérprete Vimscript ou qualquer coisa além dos conceitos básicos do modo Ex. No entanto, é mais fácil estender e introspectar do que o original, as evil-*extensões são o equivalente do Emacs aos plugins do Vim em quase todos os casos ( evil-leaderpor exemplo, seria uma exceção, porque não é necessário oferecer considerando o suporte ao mapa de teclas do Emacs).

Considerando que evilestá ultrapassando o Vim em alguns pontos (veja :se sua visualização visual ou quão pouco esforço cria um novo modo útil ), recomendo sinceramente a todos os interessados ​​em edição modal para o Emacs.

wasamasa
fonte
Você mencionou g/ser um comando newish no Vim. Eu nunca vi isso e não consigo encontrar nenhuma documentação. O que isso faz no Vim?
ivan
Me desculpe, eu quis dizer gn. Transforma resultados da pesquisa em um objeto de texto. Além disso, já foi implementado até agora.
Wasamasa 28/08/16
Ah entendo. Fico feliz em saber que ele foi implementado, já que eu o uso bastante no Vim.
Ivan
9

Como evilé o único modo de emulação de vim desenvolvido ativamente para o meu conhecimento, tornarei minha resposta específica para o mal. evilé altamente utilizável e muito próximo a uma experiência semelhante ao vim, mas existem alguns recursos do vim que provavelmente não serão implementados (por design) e outros incompletos, mas que poderão ser adicionados eventualmente. Alguns exemplos de coisas que provavelmente não serão adicionadas:

  1. Não há intérprete vimscript e, que eu saiba, não planeja implementar um.
  2. Números crescentes e decrescentes ( C-ae C-x) não serão adicionados porque C-xé muito importante para a vinculação de teclas do Emacs.
  3. Não existe um conceito incorporado de chave de líder; em vez disso, \é vinculado evil-execute-in-emacs-statepor padrão.
  4. C-unão é obrigado a rolar para cima por padrão, porque é muito importante como uma ligação de teclas do Emacs (embora você possa sobrescrever isso evil-want-C-u-scroll).

Para encontrar uma lista dos recursos do vim que ainda não foram implementados (no momento em que escrevemos esta resposta), o melhor lugar para procurar é o rastreador de problemas . Uma amostra aleatória das coisas que estão na lista:

  1. Anexar um arquivo com exnão está implementado .
  2. Alguns comandos de movimento não se comportam como o vim .
  3. :makenão está mapeado paraM-x compile .
  4. C-ono insertmodo não se comporta exatamente como no vim .
  5. Os buffers da janela de troca não estão implementados .

Existem muitos outros, incluindo comandos que não estão na lista de problemas abertos ( excomandos especialmente complicados ), mas como você pode ver na lista, eles tendem a ser recursos do vim razoavelmente pequenos ou obscuros (o vim é um destino bastante amplo com o qual atingir 100% de paridade de recursos).

shosti
fonte
já que o emacs usa lisp. nada é impossível. por exemplo, embora a chave leader não esteja embutida, você pode instalar um plugin evil-leader.
usar o seguinte
@chenbin, é claro, eu estava apenas me referindo a coisas que vêm embutidas e ativadas por padrão com o mal.
Shosti
3

O objetivo do mal é imitar o Vim, enquanto o objetivo do Viper é imitar o Vi. Vim-mode e Vimpulse são os predecessores do mal e, até onde sei, não são mais desenvolvidos. O projeto Evil foi iniciado para solucionar as deficiências desses projetos.

Tmalsburg
fonte