Diferenças entre Emacs e Vim


685

Sem entrar em uma discussão religiosa sobre por que um é melhor que o outro, quais são as diferenças práticas entre o Emacs e o Vim? Estou procurando aprender um ou outro, mas percebo que a curva de aprendizado de cada um é alta e não consigo decidir. Eu nunca usei um editor desse tipo (eu sempre usei IDEs); portanto, qualquer coisa que ajude um novato é uma vantagem.


Antes de uma guerra de chamas começar: não estou perguntando o que é melhor, estou perguntando as diferenças entre os dois. Eu gostaria de uma comparação objetiva .


3
Se você usa um Mac (OSX), verá que muitos comandos básicos de movimento do cursor do emacs funcionam praticamente em todos os lugares. (Por exemplo, eles funcionam aqui onde estou digitando esse comentário na página da Web.) Portanto, para usuários de Mac, há um benefício em todo o sistema em aprender pelo menos o seguinte subconjunto do emacs: ^ A ^ B ^ D ^ E ^ F ^ K ^ L ^ N ^ O ^ P ^ T ^ V ^ Y
Matt

2
@ JamesAnderson: na minha experiência, é o contrário. Utilizo o vim há 2,5 anos, depois mudei para o emacs. As pessoas do emacs geralmente não se importam ... "o que funciona para você". Aqui está o que ,salespitchdiz em #emacs<fsbot> We aren't gonna lie. Emacs sucks. Some of us tolerate it, but we can't tell you if YOU'LL be able to. Try it and make up your own mind.
Silex

2
O Emacs é definitivamente um ótimo sistema operacional, mas falta apenas um editor decente.
technical_difficulty

1
@ JimmyM.G.Lim Não, ele usa o pager atual no sistema. Se você executar PAGER=cat man, o man exibirá o texto diretamente na tela.
SS Anne

1
acho que a polícia "primariamente baseada em opiniões" não existia quando isso foi perguntado pela primeira vez ;-) ah, tempos mais simples ... uma coisa que vou dizer é que uma vez, lendo um livro sobre o emacs e testando-o, pensei: foi a bomba. Três semanas de férias depois, descobri que havia esquecido totalmente todas as teclas digitadas. O vim, por outro lado, não é realmente o meu negócio, mas eu posso semi-funcionar com segurança quando necessário usando just i, esc, wq.
JL Peyret

Respostas:


491

(o texto abaixo é minha opinião, não deve ser tomado como fato ou insulto)

Com o Emacs, você deve abri-lo 24 horas por dia, 7 dias por semana e viver dentro do programa, quase tudo o que você pode fazer a partir daí. Você escreve suas próprias extensões, usa-o para anotações, organização, jogos, programação, acesso a shell, acesso a arquivos, ouvir música, navegar na web. Leva semanas e semanas até você ficar feliz com isso e aprender novas coisas o tempo todo. Você ficará aborrecido quando não tiver acesso a ele e mudará constantemente sua configuração. Você não poderá usar as versões do emacs de outras pessoas com facilidade e não será apenas instalado. Ele usa Lisp, o que é ótimo. Você pode transformá-lo no que quiser. (nada mesmo)

Com o Vim, quase sempre é pré-instalado. É rápido. Você abre um arquivo, faz uma edição rápida e sai. Você pode trabalhar com a configuração básica se estiver na máquina de outra pessoa. Não é tão editável, mas ainda é muito melhor do que a maioria dos editores de texto. Ele reconhece que na maioria das vezes você está lendo / editando sem digitar e torna essa parte mais rápida. Você não sofre de emacs pinkie . Não é tão irritante. É mais fácil aprender.

Mesmo que eu use o Emacs o dia todo, todos os dias (e ame), a menos que você pretenda passar muito tempo no programa que escolher, eu escolheria o vim


153
Wrt não tê-lo disponível: sugiro que você coloque seu .emacs e .emacs.d em um repositório de controle de origem e, portanto, obter a configuração perfeita do Emacs é simplesmente uma questão de checkout.
Duncan Bayne

7
O emacs e o vim podem sofrer o que é descrito acima: ambos podem ser configurados para o ponto em que são irreconhecíveis em comparação com suas formas de baunilha. Além disso, eu segundo o uso de um vcs.
AlexJ Magura #

11
Em quais sistemas você trabalha, @Radu? Eu nunca vi um sistema da vida real na década de 2010 que fosse real, em vivez de vimalias a isso.
ELLIOTTCABLE

9
Talvez o Vim seja mais fácil de aprender do que o Emacs, mas é incrivelmente confuso na primeira vez em que você o inicia, se você não tem experiência anterior com ele! Eu tive que usar o google para poder fechá-lo e ainda tive que tentar várias vezes para acertar.
hellogoodbye

9
Nunca subestime o privilégio "pré-instalado" do VIM: ele quase sempre está disponível onde quer que você vá e é utilizável com pouca / nenhuma personalização. Eu uso o tempo todo quando estou sshem outras máquinas. Foi por isso que aprendi primeiro - isso e porque meus amigos conheciam o VIM e podiam me ajudar. (Não apoio dos amigos subestimar qualquer um!)
jvriesem

137

Vim não é uma concha. E não se comunica bem com subprocessos. Isso ocorre quase por design, enquanto no Emacs, esses elementos são incluídos por design. Isso significa que algumas coisas, como incorporar um depurador ou um intérprete (produzindo um tipo de IDE), são difíceis no Vim.

Além disso, os atalhos do Emacs são acessados ​​principalmente por meio de modificadores, e obviamente a interface do Vim é famosa por modal, dando acesso a uma quantidade absurda de chaves diretas para manipulação.

O Emacs costumava ser o único editor dos dois que era programável e, embora o Vim tenha muitos níveis estranhos em sua programação, com a adição de ligações Python e Ruby (e mais, eu esqueço), o Vim também é programável da maioria das maneiras você se importaria.

Eu uso o Vim e estou bastante feliz com isso.


6
Pequena atualização: o Vim suporta uma comunicação muito melhor com os subprocessos desde as versões 8.0 e 8.1, até introduziu buffers de terminal, por isso está ficando um pouco mais próximo do emacs nesse aspecto.
DarkWiiPlayer 16/08/18

110

Vim:

  • melhor como um editor simples (menos chaves necessárias para tarefas simples)
  • comunidade de scripts mais ativa - idioma interno: vimscript
  • um repositório central de scripts, plugins, esquemas de cores, ...
  • também extensível em python, ruby
  • pode ser feito portátil (o emacs tem alguns problemas com isso)

Emacs:

  • não modal por padrão (a maioria dos editores de hoje adotou essa abordagem). Embora exista um modo maligno que simula o comportamento do vim.
  • linguagem mais poderosa para estendê-la (elisp é uma linguagem completa, e no emacs você pode praticamente redefinir tudo; enquanto no vim você não pode redefinir a construção nas funções do editor. Por outro lado, o vimscript é relativamente semelhante às linguagens dinâmicas de hoje, enquanto elisp não se assemelha a praticamente nada)
  • mais extensível
  • excelente suporte para ferramentas GNU (o grupo delas)

Pessoalmente, prefiro o vim - ele é pequeno, faz o que deveria fazer e, quando desejo um IDE completo, abro o VS. A abordagem do Emacs de ser um editor que deseja ser um IDE (ou devo dizer, um SO), mas não é bem assim, está IMHO, desatualizado. Antigamente, ter um cliente de email, cliente ftp, tetris, ... outros enfeites em um pacote (emacs) fazia algum sentido ... hoje em dia, isso não acontece mais.

No entanto, ambos são um tópico de discussões religiosas entre os usuários da comunidade de programadores e superusuários e, a esse respeito, são excelentes para iniciar guerras de chamas se forem colocados em contato (na mesma frase / pergunta).


47
"melhor como editor" é bastante vago. Eu estaria interessado em ver os motivos.
Allen

41
@ Allen - O que é vago nele? Raramente encontro usuários do vim e do emacs, que têm um problema com essa declaração. Mesmo os usuários hardcore do emacs geralmente aceitam isso como um fato. Você usou os dois editores? Eu acredito que é relativamente óbvio que o vim tem uma vantagem no aspecto dos recursos de edição de texto.
Rook

36
Estou incrédulo que alguém aceite isso como um fato. Como usuário de longa data do emacs e do VI simples, eu usei o vim algumas vezes - mas "melhor como editor" tem que ir para o emacs em minha mente se por nenhuma outra razão além de uma seleção muito mais ampla de modos principais e secundários para ajudá-lo enquanto você digita.
Kendall Helmstetter Gelner 16/09/09

61
O Vim é melhor como editor, porque manipular texto requer menos movimento de mãos e dedos do que o emacs, pelo menos é a minha experiência.
StackedCrooked 16/09/09

7
Mas, tirando isso, o vim efetivamente é mais adequado para edição: números de linha, modo visual, manipulação wint1.kaist.ac.kr/files/attach/images/59/450/… . FCOL, tive problemas para obter o emacs apenas para rolar uma linha de cada vez.
Rook

52

Se você está procurando uma análise objetiva de ambos os editores, observe as origens e a filosofia por trás de seus respectivos designs. Pense em qual deles seria melhor para você e aprenda-o (e aprenda-o e aprenda-o, porque leva um tempo para descobrir sua verdadeira utilidade contra qualquer IDE). Uma Introdução à Edição de Vídeo com Vi foi escrita por Bill Joy e Mark Horton e ele explica por que ele escolheu o design modal e a lógica para vários pressionamentos de tecla (isso me ajuda a lembrar que CTRL-W + W (passará para a próxima janela W e será o mesmo para CTRL W + CTRL W, caso você mantenha a tecla CTRL pressionada por mais tempo.

Aqui está um link para a linha do tempo do Emacs e tem a referência ao artigo do Multics Emacs. Aqui está o artigo da RMS sobre o Emacs , onde vejo que o estresse está em um editor de texto programável (mesmo em 1981 e antes).

Não li os jornais da emacs, mas li o vi de Bill Joy algumas vezes. Ambos são antigos, mas você ainda terá a filosofia e poderá optar por usar a ferramenta atual (vim 7.x ou emacs 25?)

Edit: Eu esqueci de mencionar que é preciso paciência e imaginação para ler esses dois documentos, pois leva você de volta no tempo enquanto lê. Mas vale a pena.


43
  1. O Vim era sempre mais rápido do que o Emacs. Estou dizendo que em qualquer máquina, as instalações prontas para uso do Vim serão iniciadas mais rapidamente do que as instalações prontas para uso do Emacs. E eu costumo pensar que, após uma quantidade moderada de personalização de qualquer um deles, o Vim ainda será iniciado mais rápido que o Emacs.

  2. Depois disso, a outra diferença prática foram os modos do Emacs. Eles tornam sua vida extremamente mais fácil ao editar XML, C / C ++ / Java / qualquer que seja, LaTeX e as linguagens mais populares que você pode imaginar. Eles fazem você querer manter o editor aberto por longas sessões e trabalho.

Em resumo, direi que o Vim o leva a realizar tarefas de edição curtas e rápidas; enquanto o Emacs incentiva você a mergulhar por longas sessões.


1
Eu não acho que os modos facilitam a vida, pelo contrário. E Larry Tesler pensa o mesmo .
Eliran Malka

2
Como os modos do Emacs ajudam na codificação? (Eu sou novo para isso ...)
jvriesem

4
Há muito tempo, mudei do vi para o emacs por quatro razões: (a) um clique para chegar ao próximo erro do compilador, (b) integração com gdb, (c) grep e find-grep. É possível fazer essas coisas no vim agora?
Zzz777

"O Vim sempre foi mais rápido do que o Emacs" - se você mantiver um servidor emacs em execução, iniciar o emacs-client é muito rápido. Eu tenho scripts para isso, que replico (usando git) em todas as minhas máquinas. (I * não * também usam vim, na verdade, que sempre depende de onde eu sou, e qual é a tarefa)
Jay

"O Vim sempre foi mais rápido para iniciar do que o Emacs" - também, com use-packagee sua :deferopção, o meu Emacs abre quase imediatamente. Eu até desisti de usar o emacsclient.
Jay

37

O VI está sempre disponível e será executado no modo de usuário único mais aleijado, gráficos quebrados, sem mapa de teclas, máquina de link lento - então vale a pena saber editar arquivos simples nele apenas para tarefas sysadmin.

O Emacs é uma interface de usuário completa em um editor. A idéia é que você inicie o Emacs ao iniciar a máquina e nunca a deixe. É possível ter milhares de sessões presentes.

Se vale a pena aprender os recursos do Emacs em comparação com o uso de um editor de GUI / IDE e algo como python / awk / etc para tarefas extras, você decide.


2
Conheço o VI apenas por esses motivos - mas hoje em dia eu diria que é muito improvável que você encontre um sistema UNIX sem pelo menos uma instalação básica do EMACS, e isso pode tornar um ambiente de shell ruim mais tolerável.
Kendall Helmstetter Gelner 16/09/09

3
Ou, jam busybox em um initrd e depurar um driver de armazenamento quebrado para o dispositivo de inicialização, tão cedo no processo de inicialização que tudo que você tem é o disco de RAM inicial, e ainda assim você ainda tiver um editor - vi.
smcameron

2
Depois de um tempo com o vi, seus dedos conhecem os movimentos - mas você não consegue se lembrar quais são as teclas reais!
276 Martin Martin Beckett

10
Eu pensei edque era "sempre disponível e será executado no modo de usuário único mais aleijado, gráficos quebrados, sem mapa de teclas, máquina de link lento". Espera, que ano é este? (Suspiro - ed, eu nunca vou te esquecer.)
Belacqua

2
@ Kendall: O atual Ubuntu Linux não vem com o emacs instalado.
intuited

25

Eu sou um fã-fã completo do Emacs, mas eu conhecia o VI muito antes de conhecer o Emacs. Dito isto, eu faço todo o meu pessoal aprender VI, porque está sempre disponível, em qualquer lugar. Não pode dar errado com nenhum deles.


2
Essa também é minha experiência ... O Emacs ou o uEmacs nunca esteve disponível. Meu primeiro editor foi o uEmacs (no Amiga), mas desde que aprendi o vim, era muito conveniente ter por perto.
Marius

Esta é basicamente a minha experiência também. O Vi está em toda parte e geralmente é instalado como o $ EDITOR padrão em sistemas unix, então você precisa saber se estiver trabalhando com o unix. Dito isto, eu uso o emacs para edição de texto todos os dias e adoro isso.
Fergie

14

Parece que uma resposta já foi selecionada, mas a grande diferença para mim sempre foi o modal versus o não modal. O Vim é modal, o que significa que ele faz otimizações com base em um conjunto específico de modos de uso. Pelo menos é assim que eu sempre olhei para isso. Isso torna o uso do Vim uma experiência diferente porque, em vez de ter uma área de trabalho na qual você digita o código, você realmente está dizendo a um ambiente para agir no texto. É por isso que as pessoas dizem coisas como no Vim: você realmente está aprendendo um idioma. O: wq e: s / foo / bar fazem parte de um ambiente semelhante a um shell que edita e lê texto.

O Emacs, por outro lado, está muito mais próximo da maioria dos editores / processadores de texto / etc. você vê hoje. Você tem um espaço de trabalho que possui uma interface altamente programável. É por isso que você vê coisas como email, irc, shells, etc. Como programador, é fácil pensar em termos de dizer "pegue o número da linha em que estou e faça algo com as informações". O desejo de deixar o editor se torna menor porque, em vez de sair, abrir outro aplicativo / idioma e fazer coisas em algum texto, você tem o Emacs, onde você pode fazer essas coisas no escopo do seu editor.

As duas idéias não são necessariamente contrastantes, mas é simplesmente que elas revelam dois focos diferentes. Pessoalmente, eu uso o Emacs, mas vi pessoas que conhecem o Vim muito bem e podem dizer honestamente que não importa qual você escolher. Eu tentei o Vim primeiro, mas o Emacs acabou me atrapalhando. É verdade que não importa o que você escolher, você deve ter pelo menos um pouco de proficiência no Vim, pois ele sempre está disponível.


13

Comecei com o vi, fui para o emacs e depois para o vim. Estou pensando em experimentar o Emacs para ver o que mudou nos últimos cinco anos. (Falando em IDE, eu entrei em eclipse por um tempo, mas eu prefiro minha janela de terminal conectando meu Mac à minha caixa Linux (do marido)).

A coisa de recortar e colar tem me incomodado ultimamente. Recortar e colar no Vim executa mais etapas do que no Emacs, IIRC. E colar de um navegador para uma janela de terminal é irritante, a menos que você faça algo sofisticado que eu não sinta vontade de fazer, então aguentei a indentação estranha. Eu acho que editar vários arquivos no emacs foi mais fácil. Pelo menos saltando de um arquivo para o próximo, se você tiver os dois na tela.

Eu não brinquei com os recursos sofisticados do vi ou do emacs, pois gosto de começar o negócio da codificação. Tudo o que eu preciso é das cores bonitas e da guia adequada para conversão de espaço (especialmente importante com python).

Eu acho que tudo depende se você deseja usar :wqou Ctrl-x Ctrl-s(IIRC) para salvar um arquivo, se você não se importa com coisas sofisticadas.

@mgb estava correto. Eu estive no linux mínimo para consertar algo há apenas um mês ou dois atrás em uma distribuição Debian. vi foi o único editor disponível.


1
Isso ainda não está pronto, mas é muito mais fácil do que ajustar todas as configurações que atrapalham as pastas dos terminais. Use :set paste, cole seu texto e, quando terminar :set nopaste, voltará ao modo normal. Há também o :set pastetoggle=<F2>comando que irá alternar isso usando a combinação de teclas escolhida.
hbar

No modo recuo, você pode fazer isso ^R^P+para colar da área de transferência e manter o recuo atual. ^R^O+diminuirá o recuo. ^R+irá inseri-lo como se você tivesse digitado. :help i_^R^Ppara mais informações.
intuited

3
Não consigo imaginar cortar / colar ser mais fácil do que yyp. Além disso, veja aqui para recortar e colar de e para diferentes janelas stackoverflow.com/a/8757876/654789
puk

@puk - Ctrl-k (ianque) / Ctr-y (put) é tão fácil no emacs. Em Emacs você também tem vários registros (az) você pode economizar texto ou a posição atual em ...
Kendall Helmstetter Gelner

3
vim tem vários registros bem
TamaMcGlinn

12

Há uma enorme diferença no nível diário - o Vim (ou qualquer variante vi) é inerentemente modal (você entra em modos de comando onde não pode editar) e o Emacs (junto com a maioria dos outros editores) não.

Claro, usando menus e outros itens, você não precisa realmente entrar no modo de comando no Vim - primeiro. Mas para usar uma fração minúscula do poder do Vim, você precisará. Esse é o cerne do debate Vim / Emacs.

Pessoalmente, também acho que o Emacs é muito mais extensível. Você pode encontrar pacotes Elisp para muitas coisas.

Estou curioso, porém, por que você está pensando em aprender um desses sobre um IDE mais tradicional. Para que você deseja aprender um desses?


8
Eu só quero aprender para ver se isso resiste ao seu hype, para ser honesto. Vi como os dois são flexíveis e vi especialistas fazendo coisas bem loucas neles, e quero ver se vale a pena a curva de aprendizado. Além disso, meu IDE não suporta Lisp. :)
Sasha Chedygov 15/09/09

3
Hmm. O problema é que existe muito do Emacs ... mas o que ainda deixo um IDE para usar o emacs é uma série complexa de tarefas repetitivas, que eu automatizo usando a gravação de macro. Por exemplo, você pode pegar uma palavra ou expressão atual, copiá-la para um "buffer" (pense em recortar / colar apenas você pode ter mais de um) e depois entrar em outro arquivo, digitar algum texto parcialmente usando o valor copiado e outro anteriormente copie também o valor, avance o cursor, salve a posição e retorne ao primeiro buffer novamente ... depois repita o processo para a próxima linha do arquivo original.
Kendall Helmstetter Gelner 16/09/09

1
Eu usei muito as macros no vi e no Emacs. O que você está perdendo é o fato de o Emacs ter uma seleção muito mais ampla de métodos para acessar ao usar macros, e o fato de que você pode usar buffers de corte em qualquer lugar - mesmo no meio dos termos de pesquisa, por exemplo. Por favor, diga-me como você escreveria uma macro que selecionaria uma palavra de uma expressão com base em uma regex, pegaria o termo encontrado, pesquisaria outro documento sobre esse termo e faria substituições em torno dele.
Kendall Helmstetter Gelner 16/09/09

2
@ kendall-helmstetter-gelner - isso é possível com o vimscript, ou os idiomas em que o vim possui ligações (como ruby ​​/ vim / tcl / perl). Você tem acesso a todas as funções do vim e buffers de editor nas linguagens de script.
segy 18/09/09

1
Isso é impressionante, mas fazer o mesmo no Emacs requer apenas o uso das teclas que eu já conheço para formar uma macro complexa, em vez de precisar escrevê-la manualmente. É fácil para quem conhece o emacs fazer uma macro que execute essa tarefa, mas eu diria que não há muitos usuários de VI que poderiam construir a macro que você definiu sem uma quantidade razoável de pesquisas.
Kendall Helmstetter Gelner 30/03/11

11

Muita coisa foi dita sobre os dois editores, mas eu tenho apenas cinco centavos a acrescentar. Ambos os editores são maravilhosos e você não pode dar errado com nenhum deles.

Sou usuário do vi / vim há cerca de 15 anos. Eu tentei converter para o emacs várias vezes, mas sempre descobri que o vim realmente pode fazer a coisa que está faltando imediatamente, sem a necessidade de escrever uma extensão lisp ou instalar algo.

Para mim, a principal diferença nos editores que o vim faz com que você use o ambiente / sistema operacional, enquanto o emacs tenta encapsulá-lo ou substituí-lo. Por exemplo, você pode adicionar uma data em seu texto: r! Date no vim, ou calendário com: r! Cal 1 2014, ou mesmo substituir o conteúdo do buffer com a versão hexadecimal do conteúdo. Por exemplo. :%! xxd, edite hex e volte com:%! xxd -r, e muitos outros usos, como grep embutido, sed, etc.

Outro exemplo é o uso com jqe gron. Por exemplo. Cole o json blob no editor e execute a transformação:

:r!curl -s http://interesting/api/v1/get/stuff
:%!gron | grep 'interesting' | gron -u

OU

:%!jq .path.to.stuff

Cada um dos comandos canalizados acima pode ser executado separadamente via :%!<command>, where %significa todo o documento, mas também pode ser executado na seleção, nas linhas selecionadas, etc. Aqui, o gron outputpode ser usado como jqcaminho.

Você também obtém a funcionalidade de edição em lote do EX, por exemplo. Substituindo certas palavras, reformatando o código, convertendo caracteres de nova linha dos-> unix, execute uma macro em, digamos, 100 arquivos por vez. É facilmente feito com ex. Não tenho certeza se o emacs tem algo semelhante.

Em outras palavras, o IMHO vim se aproxima da filosofia unix. Geralmente é mais simples e menor, mas se você conhece seu sistema operacional e suas ferramentas, provavelmente não precisará mais do que ele (VIM) tem a oferecer. Eu nunca faço.

Além do vi, o padrão é padrão em qualquer sistema unix / linux, por que aprender a usar 2 ferramentas que fazem a mesma coisa? É claro que alguns sistemas oferecem mg ou algo semelhante, mas definitivamente nem todos eles. Unix + Vi <3.

Bem, apenas meus 5 centavos.


8
"O Vim se aproxima da filosofia unix." - Você está falando aqui da filosofia sobre as ferramentas disponíveis no seu shell. O próprio shell, no entanto, é uma grande aglomeração de embutidos, histórico, globbing, controle de processos, programabilidade e assim por diante. O Emacs claramente se aproxima da filosofia dos shells unix: forneça um ambiente altamente personalizável no qual as ferramentas possam ser usadas juntas e facilite ao usuário estender o conjunto de ferramentas com seus próprios trechos de código enquanto trabalham. Acho que podemos ver que o emacs e o vim estão fortemente enraizados na tradição do unix.
Matt

1
Obrigado por seu comentário. Não era minha intenção iniciar uma guerra de editor aqui nem ofender os usuários do emacs . Apenas acho mais fácil e mais portátil invocar os comandos reais do shell (ou de dentro do editor), em vez de escrever extensões complexas para encapsular a funcionalidade no emacs , que tende a tornar o ambiente inchado com o tempo. Essas extensões, no entanto, dependem da preferência do usuário e podem ser feitas, mas de nenhuma maneira aplicadas por qualquer um dos editores. Portanto, concorde com você em relação ao lugar emacs e vi (m) na tradição UNIX.
Alex

1
Só para continuar a não guerra, espero que fique claro que não discordo de sua analogia "o vim é mais como uma ferramenta unix". Simplesmente me ocorreu que essa intuição poderia ser estendida com "e o emacs é mais como um shell unix". :-)
Matt

@ Matt: Eu gosto da analogia. Amém para isso. ;)
Alex

2
Você pode fazer tudo o que mencionar e muito mais no emacs (o modo hexl, por exemplo, vai direto para editar o arquivo em hexadecimal com uma visualização ascii ao lado). Também conheço bem o VI, mas criar macros é muito mais fácil e flexível no Emacs, e pode fazer muito mais do que as implementações modernas do VIM. Essa é a razão para conhecê-lo, porque o emacs está na maioria dos lugares e pode oferecer um aumento real na edição de texto.
Kendall Helmstetter Gelner

10

Para mim, os profissionais do emacs são,

  • O modo tramp permite editar arquivos remotos através do ssh. assim como arquivos locais.
  • tramp-mode + dired = cliente sftp completo
  • suporte para todos os idiomas de que você precisará.
  • emulador de terminal interno (modo termo) para que eu possa continuar codificando sem alternar entre aplicativos.
  • extensibilidade qualquer coisa que você não gosta, pode mudar usando o lisp.

11
FWIW: o vim praticamente tem os 3 primeiros (embora com nomes diferentes. "Tramp-mode" é "netrw" no vim). O nº 4 é geralmente considerado um bug, não um recurso dos usuários do vim. O número 5 é verdadeiro no vim se você substituir "elisp" (o pior dialeto lisp de todos os tempos, dizem meus amigos que adoram o Emacs) por python / mzscheme / perl / ruby ​​/ tcl / vimscript.
Laurence Gonsalves

3
você pode comentar o porquê # 4 de um bug?
Hamza Yerlikaya

2
Confira o complemento Conque para obter um shell incorporado no vim.
intuited

9

Para mim, o emacs possui melhores ferramentas de desenvolvimento (não apenas ferramentas baseadas em tags).


9

Gostaria de colocar aqui uma citação do livro "A Arte da Programação UNIX":

Muitas pessoas que usam regularmente o vi e o Emacs tendem a usá-los para coisas diferentes e acham valioso conhecer os dois.

Em geral, o vi é melhor para trabalhos pequenos - respostas rápidas ao correio, ajustes simples na configuração do sistema e similares. É especialmente útil quando você estiver usando um novo sistema (ou um remoto em uma rede) e não tiver seus arquivos de personalização do Emacs à mão.

O Emacs se destaca por sessões de edição estendidas nas quais você precisa lidar com tarefas complexas, modificar vários arquivos e usar os resultados de outros programas durante a sessão. Para programadores que usam o X no console (o que é típico em Unixes modernos), é normal iniciar o Emacs logo após o tempo de login em uma grande janela e deixá-lo em execução para sempre, possivelmente visitando dezenas de arquivos e até mesmo executando programas em várias sub-janelas do Emacs.

O que realmente quero destacar aqui é o seguinte: " Muitas pessoas acham valioso conhecer os dois ."


Provavelmente está desatualizado. Acho que naqueles dias a capacidade do Emacs de ter Navegador, SSH, Music Player e sistemas lentos que pararam de disparar outros aplicativos fez acreditar que era melhor abrir um aplicativo e ficar com ele?
Nishant

A boa notícia é: não está desatualizado! Você pode usar o navegador, o Music Player etc. fora do Emacs, mas o que o Emacs realmente traz é a mesma boa interface para todas essas funções e a única maneira (Elisp) de estendê-las.
Andriy Tykhonov 01/07/2014

De acordo comigo, a perspectiva do TAUP do Emacs está desatualizada porque, naqueles dias, o Emacs era uma vantagem de ter um, pois era um único aplicativo em execução que podia fazer várias coisas ao mesmo tempo - como irc, música, edição remota etc. No entanto, hoje em dia você tem excelentes aplicativos para cada um desses objetivos e a memória também não é um problema ... Imagine ler o Gmail no Emacs - quero dizer, a interface do Gmail realmente tem combinações de teclas incríveis, personalizando isso em um cliente de email do Emacs. leva um tempo considerável e pode não ser tão bom quanto a interface original do Gmail, etc.
Nishant

Não está desatualizado! :)
Andriy Tykhonov 01/07/2014

> No entanto, hoje você tem excelentes aplicativos para cada uma dessas finalidades Sim, mas você tem todas essas aplicações com interfaces, configurações, experiência do usuário muito diferentes etc etc etc etc ... Mas o Emacs é a única ferramenta! Por exemplo, eu gosto muito das combinações de teclas do Emacs, uso-as no shell do navegador. E é muito bom que pelo menos algumas coisas são o mesmo dentro de aplicações ...
Andriy Tykhonov

9

Benefícios do Emacs

  • O Emacs possui uma interface não modal (por padrão) e uma modal (por exemplo, pode emular o vim e o vi através do Evil, Viper ou Vimpulse).

  • Um dos programas de computador mais portados. É executado no modo de texto e sob interfaces gráficas do usuário em uma ampla variedade de sistemas operacionais, incluindo a maioria dos sistemas Unix (Linux, os vários BSDs, Solaris, AIX, IRIX, macOSetc.), MS-DOS, Microsoft Windows, AmigaOS, e OpenVMS. Os sistemas Unix, gratuitos e proprietários, freqüentemente fornecem o Emacs fornecido com o sistema operacional.

  • A arquitetura do servidor Emacs permite que vários clientes se conectem à mesma instância do Emacs e compartilhem a lista de buffers, kill ring, desfazer histórico e outro estado.

  • Sistema de ajuda on-line abrangente com combinações de teclas, funções e comandos documentados em tempo real.

  • Variante da linguagem de programação Lisp extensível e personalizável (Emacs Lisp), com recursos que incluem:

  • Um gerenciador de arquivos poderoso e extensível (direcionado), depurador integrado e um grande conjunto de desenvolvimento e outras ferramentas.

  • Ter todos os comandos como uma função Emacs Lisp habilita os comandos para DWIM (Do What I Mean), respondendo programaticamente a ações passadas e estado do documento. Por exemplo, um comando alternar ou dividir janela pode alternar para outra janela, se houver, ou criar um, se necessário. Isso reduz o número de pressionamentos de tecla e comandos que um usuário deve lembrar.

  • "Um sistema operacional dentro de um sistema operacional". O Emacs Lisp permite que o Emacs seja programado muito além dos recursos de edição. Até uma instalação básica contém várias dezenas de aplicativos, incluindo dois navegadores da Web, leitores de notícias, vários agentes de correio, quatro clientes de IRC, uma versão do ELIZA e uma variedade de jogos. Todos esses aplicativos estão disponíveis em qualquer lugar que o Emacs execute, com a mesma interface e funcionalidade do usuário. A partir da versão 24, o Emacs inclui um gerenciador de pacotes, facilitando a instalação de aplicativos adicionais, incluindo navegadores alternativos, EMMS (Sistema Multimídia Emacs) e muito mais. Também estão disponíveis vários pacotes para programação, incluindo alguns direcionados a combinações específicas de idioma / biblioteca ou estilos de codificação.

Benefícios dos editores do tipo vi

  • Os comandos de edição são composíveis
  • O Vi possui uma interface modal (que o Emacs pode emular)
  • Historicamente, o vi carrega mais rápido que o Emacs.
  • Embora profundamente associado à tradição UNIX, ele roda em todos os sistemas que podem implementar a biblioteca C padrão, incluindo UNIX, Linux, AmigaOS, DOS, Windows, Mac, BeOS, OpenVMS, IRIX, AIX, HP-UX, BSD e POSIX. sistemas.
  • Extensível e personalizável através do script Vim ou APIs para linguagens interpretadas como Python, Ruby, Perl e Lua
  • Onipresente. Essencialmente, todos os sistemas Unix e similares ao Unix vêm com o vi (ou uma variante) embutido. Vi (e ex, mas não vim) é especificado no padrão POSIX.
  • Ambientes de resgate de sistemas, sistemas incorporados (principalmente aqueles com busybox) e outros ambientes restritos geralmente incluem vi, mas não emacs.

Fonte: https://en.wikipedia.org/wiki/Editor_war


7

Agora você nem precisa pensar na diferença entre os dois por causa do Spacemacs . É uma distribuição Emacs orientada pela comunidade.

Como foi dito,

O melhor editor não é o Emacs nem o vim, é o Emacs e o Vim.

O Spacemacs combina o melhor do Emacs e do Vim, o que facilita muito a sua vida e trabalho.

Veja a captura de tela abaixo,


(fonte: spacemacs.org )


3
Esta é batota ... É emacs com algumas configurações funk;) Um monte de configurações, na verdade
Alex

2
Isso é ótimo - quando funciona. Quando isso não acontece - se você ainda não conhece o elisp e o emacs ou não consegue encontrar os principais contribuintes no bate-papo com gitter -, geralmente fica sem dinheiro e sem sorte. (às vezes, excluir o diretório melpa no .emacs pode consertar as coisas ...)
Aaron Hall

1
Embora tenha muito mais coisas do que eu preciso, estou realmente satisfeito com o Spacemacs. Eu tenho meus dotfiles no github para poder configurar novas máquinas com facilidade / rapidez e, como uso o evil (atalhos de teclado do vim), tenho habilidades suficientes para sobreviver quando preciso trabalhar em máquinas nas quais não consigo instalar minha configuração do spacemacs.
anr78

6

A maior diferença para mim na escolha de usar o emacs sobre o vim foi o suporte integrado ao gdb no emacs. O Vim não inclui isso na distribuição padrão e o projeto para integrar o gdb e o vim era quase impossível de se trabalhar com o MacVim


1
Eu costumava Vim para editar, e Xcode para a depuração, é inferior a ideal, mas factível ..
StackedCrooked

4

É como maçãs e laranjas. Ambos têm design e filosofia diferentes. O Vim é um editor de texto, enquanto o Emacs é um intérprete Lisp que faz a edição de texto.

Eu uso o Vim porque é rápido, lento e muito bom em manipular textos. Possui uma ligação de chave natural compostável que pode tornar suas tarefas de desenvolvimento realmente harmônicas. O Vim é baseado na simples filosofia * nix de fazer uma coisa muito bem - isto é, manipulação de texto.

Estender o Vim usando o bash / zsh e o tmux geralmente é fácil e permite que você aprenda muitas coisas. IMHO esta é uma boa curva de aprendizado. O importante é aprender a integrar essas coisas para obter um aplicativo de trabalho maior. Com o Vim, você precisará aprender a integração porque não se integra naturalmente, a menos que você diga como. Outra extensão que vale a pena usar é o Tig. É um front end baseado no Git. Eu só tenho uma ligação que abre o Tig silenciosamente e depois faço todo o material do Git lá.

Cabe ao usuário final decidir o que funciona melhor. O fato de o Emacs e o Vim terem resistido ao teste do tempo é prova de seu valor. Eventualmente, um bom programador não precisa de nada além de uma caneta e um papel para ser criativo. Bons algoritmos não precisam de editores para apoiá-los. Portanto, experimente os dois e veja o que o torna mais produtivo. E aprenda padrões de design com esses dois softwares, pois há muito o que aprender e descobrir!



3

O Emacs é realmente um programa que faz tudo , e o vi (m) é apenas um editor. Se você estiver editando texto, ambos são bons, mas eu prefiro o emacs, simplesmente porque tenho que mudar um da linha inicial para me movimentar e continuar digitando as coisas erradas no modo de comando. Se você não tem esse problema, vi (m) pode ser o editor para você.


2

Um ponto de vista icterícia:

vi (não vim) é uma necessidade profissional. Você sempre tem alguma forma de vi facilmente disponível, independentemente do ambiente. Você pode estar no vi quando no emacs, no vi para criar comandos bash no unix-land.

Até o Microsquish precisa oferecer suporte ao vi (embora faça um bom trabalho de ocultá-lo) por causa do governo e da conformidade corporativa com os padrões publicados.

Na minha opinião, se você trabalha em um ambiente prático - não uma flor de estufa confinada a um equipamento sofisticado em um ambiente de desenvolvimento ou na academia -, saber muito sobre um editor sofisticado é uma desvantagem de emprego. Não aprenda todos os truques sofisticados no vim ou no emacs e não desenvolva várias macros para fazer com que o ambiente de edição se incline à sua vontade. É um enorme tempo gasto no seu caminho quando você atende a diferentes máquinas que provavelmente não pode justificar em um ambiente de fábrica.

Leia o artigo de Bill Joy - é um exercício de engenharia muito competente, talvez até bonito, na edição de texto simples, muito, muito rápido. A regra de Parito se aplica aqui: 80% da fruta está em 20% das cestas. Editar texto simples de maneira muito rápida é o ponto crucial da competência de edição - todo o resto é opcional - e às vezes prejudicial.


3
De que papel você está falando? Você pode pelo menos dar um nome, se não um link?
darkfeline

2
"Até o MS precisa apoiar o vi." Você pode apoiar isso?
Dodgethesteamroller

1

Se você se deslocar muito de um site para outro ou se seu trabalho envolve efetuar logon nos sistemas de produção, o vim é o caminho a seguir.

Todas as máquinas * nix terão o vi instalado por padrão.

A maioria dos sysdamins prefere o ksh como o shell padrão. O ksh usa as teclas de comando vi (ou emacs) para pesquisar o histórico e editar a linha de comando.

Se você não conhece bem o vi, você está gravemente deficiente ao fazer login em uma caixa unix com uma configuração padrão.

Por esse motivo, eu recomendaria o vim como seu editor diário normal. Eu já vi fãs do emacs arrancando os cabelos tentando alterar os arquivos de configuração em um servidor unix bare bones.


1
Para o bash, tente usar set -o vino seu .bashrc, em vez de set -o emacs, que é usado por padrão. Eu nunca usei o ksh, mas pode ser o mesmo.
sjas

1

Na sua pergunta, você não mencionou que deseja programar no Lisp! Mas, como você comentou suas respostas, entendi que você realmente deseja uma interface de programação LISP.

Para essa tarefa precisa, simplesmente esqueça o Vi. A integração do Emacs com o LISP é maravilhosa! Você deve usar o SLIME. Você terá uma integração maravilhosa com o REPL, podendo evalfunções, buffers ou arquivos diretamente em um intérprete em execução em um buffer emacs e muito mais ...


1
Sim, eu estou ciente disso, mas eu procurando um editor decente do Lisp não foi minha razão para fazer essa pergunta - era apenas um exemplo. Obrigado pela resposta!
Sasha Chedygov

1

Trabalho com spacemacs há cerca de 2 anos e neovim há cerca de um ano em um ambiente de produção / pesquisa. O Spacemacs é um emacs com alguns recursos extras interessantes, como camadas etc. E o neovim é um fork do vim novamente com alguns recursos extras.

Estou bastante insatisfeito com os dois em termos de experiência. E ainda estou procurando uma solução a longo prazo para minhas necessidades de edição de texto.

Aqui está uma comparação simples:

  • Neovim, vim, emacs, spacemacs, etc. todos esses editores consomem menos recursos em comparação com a maioria dos editores por aí.

  • O Neovim / vim é um pouco mais rápido que o emacs, notavelmente mais rápido que o spacemacs.

  • Em termos de experiência de edição. Posso dizer facilmente que os pacotes emacs parecem superiores. Eu acho que é porque eles se combinam melhor com o núcleo do emacs.

  • O Vimscript é legal e certamente existem ótimos projetos no ecossistema vim. O bom é que eles estão melhor documentados do que a maioria dos projetos do emacs que vi até agora.

  • Ambos podem ter falhas, dependendo do pacote que você está usando. Spacemacs tendem a congelar, e neovim tendem a exibir mensagens de erro assustadoras, então escolha seu veneno lá.

  • A edição modal no vim não é um conceito intuitivo, mas depois que você se acostuma, você deseja que seja assim. Ambos os editores fornecem isso.


1
"Edição modal (...) depois de se acostumar, você quer que seja" - isso é interessante. Passei anos usando o Emacs com o modo maligno, e acostumei-me à edição modal, e agora voltei para o não-modal ... Parece melhor. Eu acho que isso depende não apenas da pessoa, mas também do contexto / tempo na vida / seja o que for. Gosto, suponho. :)
Jay

1
@ Jay, eu acho, mas você não sente falta, coisas como seleção de colunas e pulando com ": XX"?
Kaan E.

Na verdade, não ... Às vezes, uso a seleção de retângulos do Emacs e, em vez de: xx, faço "Mg g XX" - mais algumas teclas, mas raramente preciso ir direto para uma linha. Normalmente, um aplicativo Emacs (depurador, etc) me envia para a linha certa.
Jay

0

Execução de teclas ::: A edição vi mantém cada permutação de chaves digitadas. Isso cria um caminho na árvore de decisão que identifica inequivocamente qualquer comando, enquanto os comandos do Emacs são uma combinação de chaves digitadas executadas imediatamente, o que deixa ao usuário a opção de usar ou não um comando.

Uso da memória e capacidade de personalização ::: vi é um programa menor e mais rápido, com uma capacidade mais limitada de personalização, enquanto o Emacs leva mais tempo para iniciar e requer mais memória. No entanto, é altamente personalizável e inclui um grande número de recursos, pois é essencialmente um ambiente de execução para um programa Lisp projetado para edição de texto.


0

O vim é um editor útil, você digita de forma simples vim filenamepara abrir o arquivo, editar, salvar e fechar.

O emacs é um "sistema operacional" que finge ser um editor, você pode evalcodificar para alterar seu comportamento e estendê-lo como quiser. R modepara receber / enviar email no emacs é como um software de email no sistema operacional.

Ao fazer uma edição simples, por exemplo, modificar um arquivo de configuração, eu uso o vim .

Caso contrário, nunca deixo o emacs .


0

Eu acho que a principal diferença é o alvo do design. O VIM é para UNIX como um editor de trabalho. O Emacs é para hackers GNU e lisp, por isso possui algum elemento de design misto.

Eu uso o vim na minha estação de trabalho, enquanto eu amo o emacs também.


0

Sou fã do Emacs, mas incentivo outros desenvolvedores a aprender o VI porque:

  1. você pode usar o VI para editar os makefiles do emacs.
  2. O VI inclui comandos ed e todo usuário UNIX deve conhecer ed e sed.

Eu notei vários comentários sobre o VIM iniciando mais rápido que o emacs. Se você realmente se importa com isso, execute o emacs no modo servidor e alias 'emacs' para 'emacsclient'. O cliente é super rápido, pois tudo o que faz é tocar no servidor e informar qual arquivo você deseja editar. No MacOSX, o emacsclient tem apenas 33K enquanto o emacs tem 287M.

Não sei se isso é necessário no hardware moderno. No meu MacBook Pro (2013 Retina), o emacs é carregado quase instantaneamente quando eu o executo do shell. Não detecto nenhuma pausa. Quando executo o Emacs.app (a versão da GUI), pode demorar três segundos.

A maioria das reclamações que ouço sobre o emacs parece vir de pessoas mal informadas sobre o emacs. Tendo usado o vi e o emacs desde 1982, lembro-me definitivamente de uma época em que o emacs carregava muito mais devagar que o vi e usava a maior parte da memória física nas minhas primeiras caixas UNIX, mas esse não é mais o caso e não ocorre há pelo menos 15 anos. 20 anos.

Uma queixa que vou admitir é "emacs pinkie". Isso nunca me incomodou quando eu era mais jovem. Agora que tenho 58 anos, meu dedo mindinho fica um pouco dolorido ao acessar repetidamente a tecla Control para obter as músicas do emacs. Isso é especialmente verdade no teclado do MacBook Pro, onde o Control é movido uma posição para a direita, para abrir espaço para a tecla "fn". Não é tão irritante quando Control é a tecla inferior esquerda.


Você também pode "despejar" o emacs, o que basicamente significa tirar um instantâneo das extensões elisp compiladas que você deseja. O Emacs começa muito mais rápido dessa maneira, mas leva um tempo para determinar quais extensões você deseja incluir.
Phil Harbison

Além disso, você pode jogar "Towers Of Hanoi" no emacs. Quão legal é isso? :)
Phil Harbison

Re: "emacs pinkie". Em alguns teclados antigos, como o Sun Type 3/4, no qual o HHKB Professional é baseado, o Controle é colocado onde o Caps Lock normalmente está. Não tenho a experiência do emacs que você possui, no entanto, rapidamente me acostumei a ter o Control na linha de casa. Tanto que eu fiz essa alteração em todos os meus teclados (também no MacBook Pro). O HHKB tem algumas melhorias, por exemplo, Backspace logo acima Enter e Esc ao lado 1.
martinweiss

@ PhilHarbison poderia elaborar sobre "despejo"?
A_P 19/02/19

0

Eu era usuário do vim primeiro, depois mudei para o emacs, depois para o vim, agora estou experimentando o emacs novamente.

  • Ambos são ótimos editores.
  • Ambos são muito extensíveis hoje
  • Ambos têm ótimos plugins e comunidade

Como desenvolvedores, digitamos muito e, finalmente, para mim, mover-se em buffers e arquivos são as maiores tarefas repetitivas; portanto, quero um editor em que eu possa me mover mais rápido!

A motivação para experimentar o emacs novamente é que eu percebi que o Ctrl liderava os atalhos de teclado mais rápido que o vim e mais fácil de raciocinar.

No vim, você tem modos, você tem o modo de inserção, modo visual, modo normal, o que acontece quando você pressiona algo depende do modo que você é, é uma abordagem stateful para edição. Você se move, entra no modo de inserção, edita, sai do modo de inserção e se move novamente. Eu freqüentemente me perco se perder uma imprensa ESC ou algo assim.

No emacs não há modo, basicamente você pressiona Ctrl com o seu rosa e digita a tecla, como Cx Cf, Cx Cs, Cx Cc. Existem teclas onde você precisa soltar a tecla Ctrl, eu odeio essas e sempre as substituo por outras com o controle pressionado.

Eu acho que a abordagem do emacs é mais rápida de se pensar e digitar, mas o vim tem outra força. Seus comandos são compostáveis, geralmente têm um formato. Por exemplo, para excluir uma linha, você pode usar dd, para excluir uma palavra dw. Os plug-ins fazem uso desse corte, com o plug-in vim-surround você pode excluir aspas com ds "(delete surround"), excluir até o próximo / dt/. Exclua até / / anterior dT/e assim por diante. Então, enquanto você aprende, as coisas em movimento começam a ficar muito interessantes.

Resumindo, hoje eu percebi que os keybinds do emacs são mais rápidos para edição de macro e os comandos vim são mais poderosos para microeditação

Eu tenho usado o vim nos últimos cinco anos, então edito pensando principalmente em palavras, linhas, circunvizinhas, blocos, etc. Exclua esta linha, remova aspas, substitua aspas, exclua palavras no cursor, estou tentando descobrir o emacs move para isso

Como uma citação final, eu diria que, me preocupo mais com o fzf do que com o emacs ou vim, adoraria ter um editor totalmente baseado em fzf


-9

Em primeiro lugar, Vi (realização original) não usada hoje. O que você diz é uma derivação do Vim.

Para estender a funcionalidade do Vim, você deve recompilar o Vim, o Emacs não.

O Emacs possui o Vim no modo self (viper-mode).

O Emacs geralmente precisa de instalação manual, o Vim normalmente pré-instalado em todos os Unix, como o SO (mas se você tiver acesso ssh ao host no modo tramp, ganhe o Vim :).

Se você experimenta o Vim, odeia o Emacs, então comece primeiro pelo Emacs.

Leia também http://www.dina.dk/~abraham/religion/vi-tutorial.html (link desce, use isso )

Pesquisa de resposta em hxxp: //en.wikipedia.org/wiki/Editor_war


8
Você não precisa recompilar o vim para estendê-lo. Você nem precisa sair do vim.
demasiado php

1
O vimscript / Python / Ruby / etc tem acesso a todas as estruturas internas do Vim? Se a base de código do editor ajudar a tornar a extensão ou complexidade da extensão em um nível de complexidade do EDITOR?
gavenkoa 16/09/09

1
Muitos scripts do Vim, como o MACROS intelectual. Para estender o Vim, você precisa de plugins ((
gavenkoa

1
Vi não é usado?!?! O que? O nvi é considerado original? Ou um 'vi tradicional'? Muitos sistemas como o FreeBSD, o ArchLinix agrupam o tradicional vi ou nvi e sou grato por isso. Alguns sistemas como o Debian ir com vim que está no modo de compatibilidade por padrão (se sente quase como vi tradicional)
Alex

1
@gavenkoa, eu concordo absolutamente com Alex, você obviamente nunca tentou um sistema que requer instalação manual como o Gentoo, alguns BSDs ou Arch Linux. Além disso, "Se você tenta o Vim, odeia o Emacs, então comece primeiro pelo Emacs." me faria experimentar o VIM primeiro, e você também, se você pensar um pouco. Isso me lembra pessoas dizendo para não tentar a programação funcional primeiro. Estou triste que eu não experimentá-lo mais cedo ...
JMCF125
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.