Diferencias entre Emacs y Vim


685

Sin entrar en un argumento religioso sobre por qué uno es mejor que el otro, ¿cuáles son las diferencias prácticas entre Emacs y Vim? Estoy buscando aprender uno u otro, pero me doy cuenta de que la curva de aprendizaje para cada uno es alta y no puedo decidir. Nunca he usado un editor de este tipo (siempre he usado IDEs), por lo que cualquier cosa que ayude a un novato es una ventaja.


Antes de que comience una guerra de llamas: no estoy preguntando cuál es mejor, estoy preguntando las diferencias entre los dos. Me gustaría una comparación objetiva .


3
Si usa una Mac (OSX), encontrará que muchos comandos básicos de movimiento del cursor de emacs funcionan prácticamente en todas partes. (Por ejemplo, trabajan aquí donde estoy escribiendo este comentario en la página web). Entonces, para los usuarios de Mac, hay un beneficio para todo el sistema al aprender al menos el siguiente subconjunto de emacs: ^ A ^ B ^ D ^ E ^ F ^ K ^ L ^ N ^ O ^ P ^ T ^ V ^ Y
Matt

2
@JamesAnderson: en mi experiencia es todo lo contrario. He estado usando vim durante 2.5 años, luego cambié a emacs. La mayoría de las personas de emacs simplemente no les importa ... "lo que sea que funcione para ti". ,salespitchEsto es lo que dice en #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
Emacs es definitivamente un gran sistema operativo, pero solo le falta un editor decente.
dificultad_técnica

1
@ JimmyM.G.Lim No, utiliza el localizador actual en el sistema. Si corre PAGER=cat man, man mostrará el texto directamente en la pantalla.
SS Anne

1
Supongo que la policía "principalmente basada en la opinión" no existía cuando se le preguntó por primera vez ;-) ah, las veces más simples ... una cosa que diré es que una vez, leyendo un libro sobre emacs y probándolo, pensé que Fue la bomba. Tres semanas de vacaciones más tarde descubrí que había olvidado por completo todas sus pulsaciones de teclas. vim, por otro lado, no es realmente lo mío, pero puedo semifuncionar de forma confiable cuando lo necesito usando solo i, esc, wq.
JL Peyret

Respuestas:


491

(El texto a continuación es mi opinión, no debe tomarse como un hecho o un insulto)

Con Emacs se espera que lo abra las 24 horas del día, los 7 días de la semana y que viva dentro del programa, casi todo lo que puede hacer se puede hacer desde allí. Usted escribe sus propias extensiones, las usa para tomar notas, organización, juegos, programación, acceso a shell, acceso a archivos, escuchar música, navegar por la web. Lleva semanas y semanas hasta que estés contento con él y luego aprenderás cosas nuevas todo el tiempo. Te molestará cuando no tengas acceso a él y cambies constantemente tu configuración. No podrá usar las versiones de emacs de otras personas fácilmente y no solo se instalará. Utiliza Lisp, que es genial. Puedes convertirlo en lo que quieras que sea. (nada en absoluto)

Con Vim, casi siempre está preinstalado. Es rápido. Abre un archivo, realiza una edición rápida y luego sale. Puede trabajar con la configuración básica si está en la máquina de otra persona. No es tan editable, pero sigue siendo mucho mejor que la mayoría de los editores de texto. Reconoce que la mayoría de las veces está leyendo / editando sin escribir y hace que esa parte sea más rápida. No sufres de emacs pinkie . No es tan irritante. Es más fácil de aprender.

Aunque uso Emacs todo el día todos los días (y me encanta) a menos que tengas la intención de pasar mucho tiempo en el programa que elijas, elegiría vim


153
Wrt no lo tiene disponible: le sugiero que coloque sus .emacs y .emacs.d en un repositorio de control de fuente, por lo que obtener la configuración perfecta de Emacs es simplemente una cuestión de pago.
Duncan Bayne

77
Tanto emacs como vim pueden sufrir lo que se describió anteriormente: ambos pueden configurarse hasta el punto de ser irreconocibles en comparación con sus formas de vainilla. Además, secundo el uso de un vcs.
Alexej Magura

11
¿En qué sistemas trabajas, @Radu? Nunca he visto un sistema de la vida real en la década de 2010 que tuviera real en vilugar de vimalias.
ELLIOTTCABLE

99
Tal vez Vim sea más fácil de aprender que Emacs, pero es increíblemente confuso la primera vez que lo enciendes si no tienes experiencia previa con él. Tuve que usar google para poder cerrarlo, y aún tuve que intentarlo varias veces para hacerlo bien.
HelloGoodbye

99
Nunca subestimes el beneficio "preinstalado" de VIM: casi siempre está disponible donde sea que vayas, y se puede usar con poca o ninguna personalización. Lo uso todo el tiempo cuando estoy sshen otras máquinas. Por eso lo aprendí primero, eso, y porque mis amigos conocían VIM y podían ayudarme. (¡No subestimes el apoyo de
tus

137

Vim no es una concha. Y no se comunica bien con subprocesos. Esto es casi por diseño, mientras que en Emacs, estos elementos están incluidos por diseño. Esto significa que algunas cosas, como incrustar un depurador o un intérprete (que produce una especie de IDE), es difícil en Vim.

Además, a los accesos directos de Emacs se accede principalmente a través de modificadores, y obviamente la interfaz de Vim es famosa por modal, dando acceso a una cantidad absurda de teclas directas para la manipulación.

Emacs solía ser el único editor de los dos que era programable, y aunque Vim tiene muchos niveles extraños en su capacidad de programación, con la adición de enlaces de Python y Ruby (y más, lo olvido), Vim también es programable en la mayoría de las formas te importaría

Yo uso Vim, y estoy bastante contento con eso.


66
Pequeña actualización: Vim admite una mejor comunicación con los subprocesos desde la versión 8.0 y 8.1, incluso introdujo buffers de terminal, por lo que se está acercando un poco más a emacs en ese sentido.
DarkWiiPlayer

110

Empuje:

  • mejor como editor simple (se requieren menos claves para tareas simples)
  • comunidad de scripting más activa - lenguaje interno: vimscript
  • Un repositorio central de scripts, complementos, esquemas de color, ...
  • también extensible en pitón, rubí
  • puede hacerse portátil (emacs tiene algunos problemas con eso)

Emacs:

  • no modal por defecto (la mayoría de los editores de hoy han adoptado este enfoque). Aunque hay un modo malvado que emula el comportamiento vim.
  • lenguaje más poderoso para extenderlo (elisp es un lenguaje completo, y en emacs prácticamente puedes redefinir todo; mientras que en vim no puedes redefinir las funciones integradas del editor. En el lado negativo, vimscript es relativamente similar a los lenguajes dinámicos actuales, mientras que elisp no se parece a casi nada)
  • más extensible
  • Excelente soporte para herramientas GNU (el conjunto de ellas)

Personalmente, prefiero vim: es pequeño, hace lo que se supone que debe hacer y, cuando deseo un IDE completo, abro VS. El enfoque de Emacs de ser un editor que quiere ser un IDE (o debería decir, un sistema operativo), pero no es del todo, en mi humilde opinión, está desactualizado. En los viejos tiempos, tener un cliente de correo electrónico, un cliente ftp, un tetris, ... lo que estaba en un paquete (emacs) tenía sentido ... hoy en día, ya no lo es.

Sin embargo, ambos son un tema de discusiones religiosas entre los usuarios de la comunidad de programadores y superusuarios, y en ese sentido, ambos son excelentes para iniciar guerras de llamas si se ponen en contacto (en la misma oración / pregunta).


47
"mejor como editor" es bastante vago. Me interesaría ver razones por las cuales.
Allen

41
@Allen - ¿Qué tiene de vago? Raramente encuentro usuarios de vim y emacs, que tienen un problema con esa declaración. Incluso los usuarios hardcore de emacs generalmente lo aceptan como un hecho. ¿Has usado ambos editores? Creo que es relativamente obvio que vim tiene una ventaja en el aspecto de las funciones de edición de texto.
Rook

36
Estoy incrédulo de que alguien acepte eso como un hecho. Como usuario habitual de emacs y de VI simple, he usado vim varias veces, pero "mejor como editor" tiene que recurrir a emacs en mi mente si no es por otra razón que una selección mucho más amplia de modos mayor y menor. para ayudarte mientras escribes.
Kendall Helmstetter Gelner

61
Vim es mejor como editor porque manipular texto requiere menos movimiento de manos y dedos que emacs, al menos esa es mi experiencia.
StackedCrooked

77
Pero aparte de eso, efectivamente vim es más adecuado para la edición: números de línea, modo visual, manipulación wint1.kaist.ac.kr/files/attach/images/59/450/… . FCOL, tuve problemas para obtener emacs solo para desplazar una línea a la vez.
Torre

52

Si está buscando un análisis objetivo de ambos editores, observe sus orígenes y la filosofía detrás de sus respectivos diseños. Piense, cuál le conviene mejor y aprenda (y aprenda y aprenda, porque lleva tiempo descubrir su verdadera utilidad frente a cualquier IDE). Bill Joy y Mark Horton escribieron una Introducción a la Edición de pantallas con Vi y explica por qué eligió el diseño modal y la justificación de varias pulsaciones de teclas (me ayuda a recordar que CTRL-W + W (cambiará al siguiente W indow y se será lo mismo para CTRL W + CTRL W, en caso de que mantenga presionada la tecla CTRL durante más tiempo.

Aquí hay un enlace a la línea de tiempo de Emacs y tiene la referencia al papel de Multics Emacs. Documento de Hereis RMS sobre Emacs , donde veo que el estrés está en un editor de texto programable (incluso en 1981 y antes).

No he leído los documentos de emacs, pero he leído el periódico vi de Bill Joy un par de veces. Ambos son antiguos, pero aún así obtendrá la filosofía y podría optar por utilizar la herramienta actual (vim 7.xo emacs 25?)

Editar: Olvidé mencionar que se necesita paciencia e imaginación para leer estos dos documentos, ya que te transporta al pasado mientras los lees. Pero vale la pena.


43
  1. Vim siempre fue más rápido para iniciar que Emacs. Estoy diciendo que en cualquier máquina, las instalaciones listas para usar de Vim se iniciarán más rápido que las instalaciones listas para usar de Emacs. Y tiendo a pensar que después de una moderada cantidad de personalización de cualquiera de ellos, Vim aún se iniciará más rápido que Emacs.

  2. Después de eso, la otra diferencia práctica fueron los modos de Emacs. Le facilitan enormemente la vida al editar XML, C / C ++ / Java / lo que sea, LaTeX y los lenguajes más populares que se le ocurran. Te hacen querer mantener el editor abierto para largas sesiones y trabajo.

En general, diré que Vim lo atrae hacia tareas de edición cortas y rápidas; mientras que Emacs lo alienta a bucear durante largas sesiones.


1
No creo que los modos hagan la vida más fácil, al contrario. Y Larry Tesler piensa lo mismo .
Eliran Malka

2
¿Cómo ayudan los modos de Emacs con la codificación? (Soy nuevo en esto ...)
jvriesem

44
Hace mucho tiempo cambié de vi a emacs por cuatro razones: (a) un clic para llegar al siguiente error del compilador, (b) integración gdb, (c) grep y find-grep. ¿Es posible hacer estas cosas en vim ahora?
zzz777

"Vim siempre fue más rápido de iniciar que Emacs": si mantiene un servidor emacs en funcionamiento, agregar emacs-client es muy rápido. Tengo scripts para eso, que reproduzco (usando git) en todas mis máquinas. (Yo * do * también uso vim, en realidad; siempre depende de dónde estoy y cuál es la tarea)
Jay

"Vim siempre fue más rápido de iniciar que Emacs". Además, con use-packagesu :deferopción, mi Emacs se abre casi de inmediato. Incluso dejé de usar emacsclient.
Jay

37

VI siempre está disponible y se ejecutará en el modo de usuario único más lisiado, gráficos rotos, sin mapa de teclas, máquina de enlace lento, por lo que vale la pena saber cómo editar archivos simples solo para tareas de administrador de sistemas.

Emacs es una interfaz de usuario completa en un editor. La idea es que enciendas Emacs cuando enciendas la máquina y nunca la dejes. Es posible tener miles de sesiones presentes.

Depende de usted aprender las capacidades de Emacs en comparación con usar un editor / IDE de GUI y usar algo como python / awk / etc. para tareas adicionales.


2
Conozco VI solo por esas razones, pero en estos días diría que es bastante improbable que encuentre un sistema UNIX sin al menos una instalación básica de EMACS, y puede hacer que un entorno de shell pobre sea más tolerable.
Kendall Helmstetter Gelner

3
O bien, atasque busybox en un initrd y depure un controlador de almacenamiento dañado para el dispositivo de arranque, tan temprano en el proceso de inicio que todo lo que tiene es el disco RAM inicial, y aún tiene un editor - vi.
smcameron

2
Después de un tiempo con vi, tus dedos conocen los movimientos, ¡pero no puedes recordar cuáles son las teclas reales!
Martin Beckett

10
Pensé edque era "siempre disponible y se ejecutará en el modo de usuario único más lisiado, gráficos rotos, sin mapa de teclas, máquina de enlace lento". Espera, ¿qué año es este? (Suspiro ed, nunca te olvidaré)
belacqua

2
@Kendall: Ubuntu Linux actual no viene con emacs instalado.
intuido

25

Soy un fanático de Emacs, pero conocía a VI mucho antes de conocer a Emacs. Dicho esto, hago que toda mi gente aprenda VI porque siempre está disponible, en todas partes. No te puedes equivocar con ninguno de ellos.


2
Esta es mi experiencia también ... Emacs o uEmacs nunca estuvo disponible. Mi primer editor fue uEmacs (en Amiga) pero desde que aprendí vim era demasiado conveniente tenerlo cerca.
Marius

Esta es básicamente mi experiencia también. Vi está en todas partes y generalmente se instala como el $ EDITOR predeterminado en sistemas Unix, por lo que debe saberlo si está trabajando con Unix. Dicho esto, uso emacs para editar texto todos los días y me encanta.
Fergie

14

Parece que ya se ha seleccionado una respuesta, pero la gran diferencia para mí siempre ha sido modal versus no modal. Vim es modal, lo que significa que realiza optimizaciones basadas en un conjunto específico de modos de uso. Al menos así es como siempre lo he visto. Esto hace que usar Vim sea una experiencia diferente porque en lugar de tener un área de trabajo en la que escriba el código, realmente le está diciendo a un entorno que actúe sobre el texto. Es por eso que la gente dice cosas como que con Vim realmente estás aprendiendo un idioma. El: wq y: s / foo / bar es parte de un entorno tipo shell que edita y lee texto.

Emacs, por otro lado, está mucho más cerca de la mayoría de los editores / procesadores de texto / etc. ves hoy. Tiene un espacio de trabajo que tiene una interfaz altamente programable. Es por eso que ves cosas como correo electrónico, IRC, shells, etc. Como programador, es fácil pensar en términos de decir "toma el número de línea en el que estoy y haz algo con la información". El deseo de abandonar el editor se vuelve menos porque en lugar de tener que salir, abrir otra aplicación / idioma y hacer cosas en algún texto, tiene Emacs donde puede hacer estas cosas dentro del alcance de su editor.

Las dos ideas no son necesariamente contrastantes, pero es simplemente que revelan dos enfoques diferentes. Personalmente uso Emacs, pero he visto personas que conocen a Vim muy bien y pueden decir honestamente que no importa cuál elijas. Primero probé con Vim pero Emacs terminó pegándome. Es cierto que no importa lo que elija, debe ser al menos algo competente en Vim, ya que realmente siempre está disponible.


13

Comencé con vi, fui a emacs, luego a vim. He estado pensando en probar Emacs para ver qué ha cambiado en los últimos cinco años. (Hablando de IDE, había entrado en eclipse por un tiempo, pero prefiero que mi ventana de terminal conecte mi Mac a mi caja de Linux (del esposo)).

Lo de cortar y pegar me ha estado molestando últimamente. Cortar y pegar en Vim da más pasos que en Emacs, IIRC. Y pegar desde decir un navegador a una ventana de terminal es irritante a menos que hagas algo elegante que no tengo ganas de hacer, así que aguanto la sangría extraña. Creo que editar varios archivos en emacs fue más fácil. Al menos saltando de un archivo a otro si los tiene a ambos en la pantalla.

No he jugado con las características sofisticadas de vi o emacs, ya que me gusta llegar al negocio de la codificación. Todo lo que necesito son los bonitos colores y la conversión adecuada de la pestaña al espacio (especialmente importante con Python).

Creo que todo depende de si quieres usar :wqo Ctrl-x Ctrl-s(IIRC) para guardar un archivo si no te importan las cosas elegantes.

@mgb fue correcto. He estado en Linux como mínimo para arreglar algo hace solo un mes o dos en una distribución de Debian. vi fue el único editor disponible.


1
Esto todavía no está hecho, pero es mucho más fácil que ajustar todas las configuraciones que estropean las pastas terminales. Use :set paste, luego pegue su texto y cuando haya terminado :set nopastevolverá al modo normal. También existe el :set pastetoggle=<F2>comando que alternará esto usando el combo de teclas elegido.
hbar

En el modo sangría, puede ^R^P+pegar desde el portapapeles y mantener la sangría actual. ^R^O+caerá la sangría. ^R+lo insertará como si lo hubiera escrito. :help i_^R^Ppara más información.
intuido

3
No puedo imaginar que cortar / pegar sea más fácil que yyp . Además, vea aquí para cortar y pegar desde y hacia diferentes ventanas stackoverflow.com/a/8757876/654789
puk

@puk - Ctrl-k (tirar) / Ctr-y (poner) es igual de fácil en emacs. En Emacs también tiene múltiples registros (az), puede guardar el texto o la posición actual en ...
Kendall Helmstetter Gelner

3
vim tiene múltiples registros también
TamaMcGlinn

12

Hay una gran diferencia en el nivel del día a día: Vim (o cualquier variante vi) es inherentemente modal (entra en modos de comando donde no puede editar) y Emacs (junto con la mayoría de los otros editores) no lo son.

Claro, al usar menús y demás, no tiene que ingresar al modo de comando en Vim, al principio. Pero para usar incluso una pequeña fracción del poder de Vim lo harás. Eso está en el corazón del debate de Vim / Emacs.

Personalmente, también creo que Emacs es mucho más extensible. Puede encontrar paquetes de Elisp para muchas cosas.

Sin embargo, tengo curiosidad de por qué está pensando aprender uno de estos a través de un IDE más tradicional. ¿Para qué quieres aprender uno de estos?


8
Solo quiero aprenderlo para ver si está a la altura de sus expectativas, para ser honesto. He visto cuán flexibles son ambos, y he visto a expertos hacer algunas cosas bastante locas en ellos, y quiero ver si vale la pena la curva de aprendizaje. Además, mi IDE no es compatible con Lisp. :)
Sasha Chedygov

3
Hmm El problema es que hay mucho de Emacs ... pero de lo que todavía dejo un IDE para usar emacs es una compleja serie de tareas repetitivas, que automatizo usando la grabación de macros. Por ejemplo, puede tomar una palabra o expresión actual, copiarla en un "búfer" (piense que cortar / pegar solo puede tener más de uno), luego ir a otro archivo, escribir un texto en parte usando el valor copiado y luego otro previamente También copie el valor, avance el cursor, guarde la posición y vuelva al primer búfer nuevamente ... luego repita el proceso para la siguiente línea del archivo original.
Kendall Helmstetter Gelner el

1
He usado muchas macros tanto en vi como en Emacs. Lo que falta es el hecho de que Emacs tiene una selección mucho más amplia de métodos para acceder mientras usa macros, y el hecho de que puede usar búferes de corte en todas partes, incluso en el medio de los términos de búsqueda, por ejemplo. Por favor, dígame cómo escribiría una macro que seleccionaría una palabra de una expresión basada en una expresión regular, tomaría el término encontrado, buscaría otro documento en ese término y luego haría reemplazos a su alrededor.
Kendall Helmstetter Gelner

2
@ kendall-helmstetter-gelner: eso es posible con vimscript o los idiomas para los que vim tiene enlaces (como ruby ​​/ vim / tcl / perl). Tiene acceso a todas las funciones de vim y las memorias intermedias del editor desde los lenguajes de script.
segy

1
Eso es impresionante, pero hacer lo mismo en Emacs requiere solo usar las teclas que ya conozco para formar una macro compleja, en lugar de tener que escribirla a mano. Es fácil para cualquiera que conozca emacs hacer una macro que haga esa tarea, pero diría que no hay muchos usuarios de VI que puedan construir la macro que usted presentó sin una gran cantidad de investigación.
Kendall Helmstetter Gelner

11

Se han dicho muchas cosas sobre ambos editores, pero solo tengo que agregar mis 5 peniques. Ambos editores son maravillosos y no puedes equivocarte con ninguno de ellos.

Soy usuario de vi / vim desde hace aproximadamente 15 años. Intenté convertirme a emacs varias veces, pero cada vez descubrí que vim realmente puede hacer lo que falta de la caja sin la necesidad de escribir una extensión lisp o instalar algo.

Para mí, la principal diferencia en los editores es que vim te hace usar el entorno / SO, mientras que emacs intenta encapsularlo o reemplazarlo. Por ejemplo, puede agregar una fecha en su texto por: r! Date en vim, o calendario con: r! Cal 1 2014, o incluso reemplazar el contenido de su búfer con la versión hexadecimal de los contenidos. P.ej. :%! xxd, edita hexadecimal y luego regresa con:%! xxd -r, y muchos otros usos más, como grep incorporado, sed, etc.

Otro ejemplo es el uso con jqy gron. P.ej. pegue json blob en el editor y luego ejecute la transformación:

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

O

:%!jq .path.to.stuff

Cada uno de los comandos canalizados anteriores se puede ejecutar por separado a través de :%!<command>, donde %significa todo el documento, pero también se puede ejecutar en la selección, líneas seleccionadas, etc. Aquí outputse puede usar gron comojq ruta.

También obtiene la funcionalidad de edición por lotes EX, por ejemplo. Reemplazando ciertas palabras, formateando el código, convirtiendo dos-> caracteres de línea nueva unix, ejecute una macro en digamos 100 archivos a la vez. Se hace fácilmente con ex. No estoy seguro si emacs tiene algo similar.

En otras palabras, IMHO vim se acerca a la filosofía de Unix. En general, es más simple y más pequeño, pero si conoce su sistema operativo y sus herramientas, es probable que no necesite más de lo que (VIM) tiene para ofrecer. Yo nunca.

Además, vi es el estándar de facto en cualquier sistema unix / linux, ¿por qué aprender a usar 2 herramientas que hacen lo mismo? Por supuesto, algunos sistemas ofrecen mg o algo similar, pero definitivamente no todos. Unix + Vi <3.

Bueno, solo mis 5 peniques.


8
"Vim se acerca a la filosofía de Unix". - Estás hablando aquí de la filosofía con respecto a las herramientas disponibles desde tu shell. El shell en sí mismo, sin embargo, es una gran aglomeración de elementos integrados, historial, control global de procesos, programabilidad, etc. Emacs claramente se acerca más a la filosofía de los shells de Unix: proporciona un entorno altamente personalizable dentro del cual las herramientas se pueden usar juntas, y facilita al usuario extender el conjunto de herramientas con sus propios fragmentos de código mientras trabajan. Creo que podemos ver que tanto emacs como vim están fuertemente arraigados en la tradición de Unix.
Matt

1
Gracias por tu comentario. No fue mi intención iniciar una guerra de editores aquí ni ofender a los usuarios de emacs . Simplemente encuentro que es más fácil y más portátil invocar los comandos reales desde el shell (o desde dentro del editor) en lugar de escribir extensiones complejas para encapsular la funcionalidad en los emacs , lo que tiende a hacer que el entorno se hinche con el tiempo. Sin embargo, estas extensiones dependen de la preferencia del usuario y pueden realizarse, pero ninguno de los editores las aplica. Así que acuerde con usted con respecto al lugar de emacs y vi (m) en la tradición UNIX.
Alex

1
Solo para continuar la no guerra, espero que quede claro que no estoy en desacuerdo con su analogía "vim es más como una herramienta de Unix". Simplemente se me ocurrió que esta intuición podría extenderse con "y emacs es más como un shell de Unix". :-)
Matt

@ Matt: me gusta la analogía. Amen a eso. ;)
Alex

2
Puede hacer todo lo que menciona, y mucho más, en emacs (el modo hexl, por ejemplo, va directamente a editar el archivo en hexadecimal con una vista previa ascii a un lado). También conozco VI bastante bien, pero crear macros es mucho más fácil y más flexible en Emacs, y puede hacer mucho más que incluso las implementaciones de VIM más modernas. Esa es la razón para saberlo, porque emacs está en la mayoría de los lugares y puede ofrecer un impulso real de edición de texto.
Kendall Helmstetter Gelner

10

Para mí, los profesionales de emacs son,

  • modo vagabundo le permite editar archivos remotos a través de ssh. Al igual que los archivos locales.
  • tramp-mode + dired = cliente sftp con todas las funciones
  • soporte para todos los idiomas que necesitará.
  • emulador de terminal incorporado (modo de término) para que pueda seguir codificando sin cambiar de aplicación.
  • extensibilidad, todo lo que no le guste puede cambiar usando lisp.

11
FWIW: vim tiene casi los primeros 3 (aunque con diferentes nombres. "Tramp-mode" es "netrw" en vim). El n. ° 4 generalmente se considera un error, no una característica de los usuarios de vim. # 5 es cierto en vim si reemplaza "elisp" (el peor dialecto lisp de todos los tiempos, me dicen mis amigos amantes de Emacs) con python / mzscheme / perl / ruby ​​/ tcl / vimscript.
Laurence Gonsalves

3
¿Puedes comentar por qué # 4 un error?
Hamza Yerlikaya

2
Consulte el complemento Conque para un shell incrustado en vim.
intuido

9

Para mí, emacs tiene mejores herramientas de desarrollo (no solo herramientas basadas en etiquetas).


9

Me gustaría poner aquí una cita del libro "The Art of UNIX Programming":

Muchas personas que usan regularmente vi y Emacs tienden a usarlos para diferentes cosas, y les resulta valioso conocer ambos.

En general, vi es mejor para trabajos pequeños: respuestas rápidas al correo, ajustes simples a la configuración del sistema, y ​​cosas por el estilo. Es especialmente útil cuando está utilizando un nuevo sistema (o uno remoto a través de una red) y no tiene a mano sus archivos de personalización de Emacs.

Emacs se distingue por las sesiones de edición extendidas en las que debe manejar tareas complejas, modificar múltiples archivos y usar los resultados de otros programas durante la sesión. Para los programadores que usan X en su consola (lo cual es típico en Unixes modernos), es normal iniciar Emacs poco después del tiempo de inicio de sesión en una ventana grande y dejarlo funcionando para siempre, posiblemente visitando docenas de archivos e incluso ejecutando programas en múltiples subventanas de Emacs.

Lo que realmente quiero resaltar aquí es: «A muchas personas les resulta valioso conocer ambas ».


Esto probablemente está desactualizado. Creo que en esos días la capacidad incorporada de Emacs de tener un navegador, SSH, reproductor de música y sistemas lentos que dejaron de activar otras aplicaciones hizo creer que era mejor abrir una aplicación y seguir con ella.
Nishant

La buena noticia es: ¡no está desactualizado! Puede usar el Navegador, el Reproductor de música, etc. fuera de Emacs, pero lo que Emacs realmente trae es la misma buena interfaz para todas estas funciones y la única forma (Elisp) de extenderlas.
Andriy Tykhonov

Según yo, la perspectiva de TAUP de Emacs está desactualizada porque, en esos días, Emacs era una ventaja tener una, ya que era una sola aplicación en ejecución que podía hacer varias cosas a la vez, como irc, música, edición remota, etc. Sin embargo, hoy tiene excelentes aplicaciones para cada uno de estos propósitos y la memoria no es un problema como antes también ... Imagínese leer Gmail en Emacs: quiero decir que la interfaz de Gmail realmente tiene incorporadas combinaciones de teclas impresionantes, personalizando eso en un Emacs Email Client va a toma un tiempo considerable y podría no ser tan bueno como la interfaz original de Gmail, etc.
Nishant 01 de

¡No está desactualizado! :)
Andriy Tykhonov

> Sin embargo, hoy tiene excelentes aplicaciones para cada uno de estos propósitos Sí, pero tiene todas estas aplicaciones con interfaces, configuraciones, experiencia de usuario, etc., etc. muy diferentes ... ¡Pero Emacs es la herramienta única! Por ejemplo, me gustan mucho las combinaciones de teclas de Emacs, las uso en el shell del navegador. Y es muy bueno que al menos algunas cosas sean iguales dentro de las aplicaciones ...
Andriy Tykhonov

9

Beneficios de Emacs

  • Emacs tiene una interfaz no modal (por defecto) y una modal (por ejemplo, puede emular vim y vi a través de Evil, Viper o Vimpulse).

  • Uno de los programas informáticos más portados. Se ejecuta en modo de texto y bajo interfaces gráficas de usuario en una amplia variedad de sistemas operativos, incluidos la mayoría de los sistemas tipo Unix (Linux, los diversos BSD, Solaris, AIX, IRIX, macOSetc.), MS-DOS, Microsoft Windows, AmigaOS, y OpenVMS. Los sistemas Unix, tanto gratuitos como propietarios, con frecuencia proporcionan Emacs incluidos con el sistema operativo.

  • La arquitectura del servidor Emacs permite que varios clientes se conecten a la misma instancia de Emacs y compartan la lista de búfer, el anillo de cierre, el historial de deshacer y otros estados.

  • Sistema de ayuda en línea generalizado con combinaciones de teclas, funciones y comandos documentados sobre la marcha.

  • Variante de lenguaje de programación Lisp extensible y personalizable (Emacs Lisp), con características que incluyen:

  • Un administrador de archivos potente y extensible (dired), depurador integrado y un amplio conjunto de herramientas de desarrollo y otras.

  • Tener cada comando como una función Emacs Lisp habilita los comandos para DWIM (Do What I Mean) respondiendo programáticamente a acciones pasadas y al estado del documento. Por ejemplo, un comando de cambio o ventana dividida podría cambiar a otra ventana si existe, o crear una si es necesario. Esto reduce el número de pulsaciones de teclas y comandos que un usuario debe recordar.

  • "Un sistema operativo dentro de un sistema operativo". Emacs Lisp permite que Emacs se programe mucho más allá de las funciones de edición. Incluso una instalación base contiene varias docenas de aplicaciones, incluidos dos navegadores web, lectores de noticias, varios agentes de correo, cuatro clientes IRC, una versión de ELIZA y una variedad de juegos. Todas estas aplicaciones están disponibles en cualquier lugar donde se ejecute Emacs, con la misma interfaz de usuario y funcionalidad. A partir de la versión 24, Emacs incluye un administrador de paquetes, lo que facilita la instalación de aplicaciones adicionales que incluyen navegadores web alternativos, EMMS (Emacs Multimedia System) y más. También están disponibles numerosos paquetes para programación, incluidos algunos dirigidos a combinaciones específicas de idioma / biblioteca o estilos de codificación.

Beneficios de los editores tipo vi

  • Los comandos de edición son componibles
  • Vi tiene una interfaz modal (que Emacs puede emular)
  • Históricamente, vi se carga más rápido que Emacs.
  • Si bien está profundamente asociado con la tradición de UNIX, se ejecuta en todos los sistemas que pueden implementar la biblioteca C estándar, incluidos UNIX, Linux, AmigaOS, DOS, Windows, Mac, BeOS, OpenVMS, IRIX, AIX, HP-UX, BSD y POSIX. sistemas.
  • Extensible y personalizable a través de secuencias de comandos Vim o API para lenguajes interpretados como Python, Ruby, Perl y Lua
  • Ubicuo. Esencialmente, todos los sistemas Unix y similares a Unix vienen con vi (o una variante) incorporada. Vi (y ex, pero no vim) se especifica en el estándar POSIX.
  • Los entornos de rescate del sistema, los sistemas integrados (especialmente aquellos con busybox) y otros entornos restringidos a menudo incluyen vi, pero no emacs.

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


7

Ahora ni siquiera necesita pensar en la diferencia entre estos dos debido a Spacemacs . Es una distribución de Emacs dirigida por la comunidad.

Como decía

El mejor editor no es Emacs ni vim, es Emacs y Vim.

Spacemacs combina lo mejor de Emacs y Vim, lo que hace que su vida y su trabajo sean mucho más fáciles.

Ver captura de pantalla a continuación,


(fuente: spacemacs.org )


3
Esto es trampa ... Es emacs con algunas configuraciones funky;) En realidad, muchas configuraciones
Alex

2
Esto es genial, cuando funciona. Cuando no es así, si ya no conoce elisp y emacs o no puede encontrar a los principales contribuyentes en el chat de gitter, generalmente está atrapado y sin suerte. (a veces, eliminar el directorio de melpa en .emacs puede arreglar las cosas, sin embargo ...)
Aaron Hall

1
Aunque tiene muchas más cosas de las que necesito, estoy realmente satisfecho con Spacemacs. Tengo mis dotfiles en github para poder configurar nuevas máquinas de manera fácil / rápida, y como uso el mal (vim keybindings) tengo suficientes habilidades para trabajar cuando tengo que trabajar en máquinas donde no puedo instalar mi configuración de spacemacs.
anr78

6

La mayor diferencia para mí al elegir usar emacs sobre vim fue el soporte integrado de gdb en emacs. Vim no tiene esto incluido en su distribución predeterminada y el proyecto allí para integrar gdb y vim era casi imposible de trabajar con MacVim


1
Utilicé Vim para editar, y Xcode para depurar, es menos que ideal pero factible ...
StackedCrooked

4

Es como manzanas y naranjas. Ambos tienen un diseño y una filosofía diferentes. Vim es un editor de texto, mientras que Emacs es un intérprete Lisp que hace edición de texto.

Uso Vim porque es rápido, furtivo y realmente bueno para manipular textos. Tiene un enlace de tecla natural composable que puede hacer que sus tareas de desarrollo sean realmente armónicas. Vim se basa en la simple * nix philiosphy de hacer una cosa realmente bien, es decir, la manipulación de texto.

Ampliar Vim usando bash / zsh y tmux suele ser fácil y le permite aprender muchas cosas. En mi humilde opinión, esta es una buena curva de aprendizaje. La clave es aprender cómo integrar estas cosas para obtener una aplicación de trabajo más grande. Con Vim necesitarás aprender integración porque no se integra naturalmente a menos que le digas cómo hacerlo. Otra extensión que vale la pena que uso es Tig. Es una interfaz Git basada en ncurses. Solo tengo un enlace que abre Tig en silencio y luego hago todas las cosas de Git allí.

Depende del usuario final decidir qué funciona mejor. Que Emacs y Vim hayan resistido la prueba del tiempo es prueba de su valía. Finalmente, un buen programador no necesita más que un bolígrafo y un papel para ser creativo. Los buenos algoritmos no necesitan editores para respaldarlos. Así que pruébelos a ambos y vea qué lo hace más productivo. ¡Y aprenda patrones de diseño de estos dos softwares, ya que hay mucho que aprender y descubrir!



3

Emacs es realmente más un programa de hacer todo , y vi (m) es realmente solo un editor. Si está editando texto, ambos están bien, pero prefiero emacs, simplemente porque tengo que cambiar uno de la fila de inicio para moverme y seguir escribiendo las cosas incorrectas en el modo de comando. Si no tienes ese problema, vi (m) puede ser el editor para ti.


2

Un punto de vista ictericia:

vi (no vim) es una necesidad profesional. Siempre tiene alguna forma de vi fácilmente disponible, sin importar el entorno. Puede estar en vi cuando está en emacs, puede estar en vi para construir comandos bash en unix-land.

Incluso Microsquish tiene que soportar vi (aunque hacen un buen trabajo al ocultarlo) debido al cumplimiento gubernamental y corporativo de los estándares publicados.

En mi opinión, si estás en un trabajo práctico en un entorno ocupado, no en una flor de invernadero confinada a una plataforma elegante en un entorno de desarrollo o en la academia, saber mucho sobre un editor elegante es una desventaja laboral. No aprenda todos los trucos elegantes en vim o emacs, y no desarrolle un montón de macros para hacer que el entorno de edición se doblegue a su voluntad. Es una enorme pérdida de tiempo que se interpone en su camino cuando atiende a diferentes máquinas que probablemente no pueda justificar en un entorno de fábrica.

Lea el artículo de Bill Joy: es un ejercicio de ingeniería muy competente, quizás incluso hermoso, para editar texto plano muy, muy rápido. La regla de Parito se aplica aquí: el 80% de la fruta está en el 20% de las canastas. Editar texto plano muy muy rápido es el quid de la competencia de edición, todo lo demás es opcional y, a veces, perjudicial.


3
¿De qué papel estás hablando? ¿Puedes al menos dar un nombre, si no un enlace?
darkfeline

2
"Incluso la EM tiene que soportar vi". ¿Puedes respaldar esto?
dodgethesteamroller

1

Si se mueve mucho de un sitio a otro o su trabajo implica iniciar sesión en los sistemas de producción, entonces vim es el camino a seguir.

Todas las máquinas * nix tendrán vi instalado por defecto.

La mayoría de los sysdamins prefieren ksh como el shell predeterminado. ksh usa las teclas de comando vi (o emacs) para buscar en el historial y editar la línea de comando.

Si no conoce bien vi, está gravemente discapacitado cuando inicia sesión en un cuadro de Unix con una configuración estándar.

Solo por esta razón, recomendaría vim como su editor normal todos los días. He visto a los fanáticos de emacs arrancar el pelo tratando de enmendar los archivos de configuración en un servidor Unix.


1
Para bash intente usar set -o vien su .bashrc, en lugar de set -o emacs, que se usa de forma predeterminada. Nunca usé ksh, pero podría ser lo mismo.
sjas

1

¡En su pregunta, no ha mencionado que desea que se programe en Lisp! Pero como ha estado comentando sus respuestas, he entendido que realmente desea una interfaz de programación LISP.

Para esa tarea precisa, simplemente olvídate de Vi. ¡La integración de Emacs con LISP es maravillosa! Deberías usar SLIME. Entonces tendrá una integración maravillosa con REPL, pudiendo evalfunciones, buffers o archivos directamente en un intérprete en ejecución en un buffer de emacs y mucho más ...


1
Sí, soy consciente de esto, pero buscar un editor de Lisp decente no fue mi razón para hacer esta pregunta, fue solo un ejemplo. Gracias por la respuesta sin embargo!
Sasha Chedygov

1

He trabajado con spacemacs durante aproximadamente 2 años y neovim durante aproximadamente un año en un entorno de producción / investigación. Spacemacs es emacs con un par de características adicionales agradables como capas, etc. Y neovim es una bifurcación de vim nuevamente con algunas características adicionales.

Estoy bastante insatisfecho con ambos en términos de experiencia. Y todavía estoy buscando una solución a largo plazo para mis necesidades de edición de texto.

Aquí hay una comparación simple:

  • Neovim, vim, emacs, spacemacs, etc. todos esos editores consumen menos recursos en comparación con la mayoría de los editores existentes.

  • Neovim / vim es ligeramente más rápido que emacs, notablemente más rápido que spacemacs.

  • En términos de experiencia de edición. Puedo decir fácilmente que los paquetes de emacs se sienten superiores. Creo que es porque se mezclan mejor con el núcleo de emacs.

  • Vimscript es agradable y, ciertamente, también hay grandes proyectos en el ecosistema vim. Lo bueno es que están mejor documentados que la mayoría de los proyectos de emacs que he visto hasta ahora.

  • Ambos pueden tener fallas dependiendo del paquete que esté utilizando. Los Spacemacs tienden a congelarse, y los neovim tienden a mostrar mensajes de error de miedo, así que elige tu veneno allí.

  • La edición modal en vim no es un concepto intuitivo, pero una vez que te acostumbras, lo quieres en cualquier momento. Ambos del editor proporcionan eso.


1
"La edición modal (...) una vez que te acostumbras, la quieres en cualquier momento", eso es interesante. Pasé años usando Emacs con modo malvado, y solía editar modal, y ahora volví a no modal ... Simplemente se siente mejor. Creo que esto depende no solo de la persona, sino también del contexto / tiempo en la vida / lo que sea. Gusto, supongo. :)
Jay

1
@ Jay, supongo, pero ¿no te pierdes cosas como la selección de columnas y saltar con ": XX"?
Kaan E.

En realidad no ... Utilizo la selección de rectángulos de Emacs a veces, y en lugar de: xx hago "Mg g XX" - unas pocas pulsaciones más, pero rara vez necesito ir directamente a una línea. Por lo general, una aplicación Emacs (depurador, etc.) me enviará a la línea correcta.
Jay

0

Ejecución de pulsación de tecla ::: vi edición retiene cada permutación de teclas escritas. Esto crea una ruta en el árbol de decisión que identifica inequívocamente cualquier comando, mientras que los comandos de Emacs son una combinación de teclas escritas que se ejecutan inmediatamente, lo que deja al usuario la opción de usar o no un comando.

Uso de memoria y personalización ::: vi es un programa más pequeño y rápido, con una capacidad de personalización más limitada, mientras que Emacs tarda más en iniciarse y requiere más memoria. Sin embargo, es altamente personalizable e incluye una gran cantidad de características, ya que es esencialmente un entorno de ejecución para un programa Lisp diseñado para la edición de texto.


0

vim es un editor útil, simplemente escribe vim filenamepara abrir el archivo, editar, guardar y cerrar.

emacs es un "sistema operativo" que pretende ser un editor, puede evalcodificar para cambiar su comportamiento y extenderlo a su gusto. UNAmode para recibir / enviar correos electrónicos en emacs es como un software de correo electrónico en el sistema operativo.

Cuando hago una edición simple, por ejemplo, modifico un archivo de configuración, uso vim .

De lo contrario, nunca dejo emacs .


0

Creo que la principal diferencia es el objetivo del diseño. VIM es para UNIX como editor de trabajo. Emacs es para hackers GNU y lisp, por lo que tiene un elemento de diseño mixto.

Yo uso vim en mi estación de trabajo, mientras que también amo los emacs.


0

Soy fanático de Emacs pero aliento a otros desarrolladores a aprender VI porque:

  1. puede usar VI para editar los archivos make de emacs.
  2. VI incluye comandos ed y cada usuario de UNIX debe saber ed y sed.

He notado varios comentarios sobre VIM que comienzan más rápido que emacs. Si realmente le importa, ejecute emacs en modo servidor y alias 'emacs' a 'emacsclient'. El cliente es súper rápido, ya que todo lo que hace es tocar el servidor en el hombro y decirle qué archivo desea editar. En MacOSX, emacsclient es solo 33K mientras que emacs es 287M.

No estoy seguro de que nada de esto sea necesario en el hardware moderno. En mi MacBook Pro (Retina 2013), emacs se carga casi instantáneamente cuando lo ejecuto desde el shell. No detecto ninguna pausa en absoluto. Cuando ejecuto Emacs.app (la versión de la GUI), puede tomar 3 segundos.

La mayoría de las quejas que escucho sobre emacs parecen provenir de personas mal informadas sobre emacs. Habiendo usado tanto vi como emacs desde 1982, definitivamente recuerdo un momento en que emacs se cargó mucho más lento que vi y usó la mayor parte de la memoria física en mis primeros cuadros de UNIX, pero ese ya no es el caso y no ha sido por al menos 15- 20 años.

Una queja que concederé es "emacs pinkie". Esto nunca me molestó en absoluto cuando era más joven. Ahora que tengo 58 años, a mi meñique le duele un poco el acceso repetido a la tecla Control para la grabación de emacs. Esto es especialmente cierto en el teclado MacBook Pro, donde Control se mueve una posición hacia la derecha para dejar espacio para la tecla "fn". No es tan molesto cuando Control es la tecla inferior izquierda.


También puede "volcar" emacs, lo que básicamente significa tomar una instantánea de las extensiones compiladas de elisp que desee. Emacs comienza mucho más rápido de esta manera, pero lleva un poco de tiempo determinar qué extensiones desea incluir.
Phil Harbison

Además, puedes jugar "Towers Of Hanoi" en emacs. ¿Cuan genial es eso? :)
Phil Harbison

Re: "emacs pinkie". En algunos teclados más antiguos, por ejemplo, Sun Type 3/4, en los que se basa el HHKB Professional, el control se coloca donde está normalmente el bloqueo de mayúsculas. No tengo la experiencia de emacs que tiene, sin embargo, muy rápidamente me acostumbré a tener Control en la fila de inicio. Tanto es así que hice ese cambio en todos mis teclados (MacBook Pro también). El HHKB tiene algunas mejoras adicionales, por ejemplo, Retroceso justo arriba de Enter y Esc al lado de 1.
martinweiss

@PhilHarbison podría elaborar sobre "volcado"?
A_P

0

Primero fui usuario de vim, luego cambié a emacs, luego a vim, ahora estoy experimentando con emacs nuevamente.

  • Ambos son grandes editores.
  • Ambos son muy extensibles hoy
  • Ambos tienen excelentes complementos y comunidad

Como desarrolladores, escribimos mucho y, por fin para mí, moverme en buffers y archivos son las tareas repetitivas más grandes, ¡así que quiero un editor donde PUEDO MOVERME RÁPIDO!

La motivación para volver a experimentar con emacs es que me caí Ctrl dirigió las teclas más rápido que vim, y es más fácil razonar.

En vim tienes modos, tienes modo de inserción, modo visual, modo normal, lo que sucede cuando presionas algo depende del modo en que te encuentres, es un enfoque con estado para la edición. Te mueves, ingresas en el modo de inserción, editas, sales del modo de inserción y vuelves a moverte. Con frecuencia me pierdo si pierdo una prensa ESC o algo así.

En emacs no hay modo, básicamente presionas Ctrl con tu rosa y escribes la tecla, como Cx Cf, Cx Cs, Cx Cc. Hay combinaciones de teclas en las que necesita liberar la tecla Ctrl, odio estas y siempre las reemplazo por otras con el control presionado.

Creo que el enfoque de emacs es más rápido para pensar y escribir, pero vim tiene otra fortaleza, para. Sus comandos son componibles, generalmente tienen un formato. Por ejemplo, para eliminar una línea que puede usar dd, para eliminar una palabra dw. Los complementos hacen uso de esa tala, con el complemento vim-surround puede eliminar las comillas con ds "(eliminar surround"), eliminar hasta el siguiente / dt/. Eliminar hasta anterior /:dT/ y así sucesivamente. Entonces, mientras aprendes, las cosas conmovedoras comienzan a ser muy interesantes.

En resumen, hoy me di cuenta de que las teclas de emacs son más rápidas para la edición de macros y los comandos vim son más potentes para la microedición

He estado usando vim durante los últimos cinco años, así que edito pensando principalmente en palabras, líneas, bordes, bloques, etc. Elimine esta línea, elimine comillas, reemplace comillas, elimine palabras en el cursor, estoy tratando de encontrar los emacs se mueve por eso

Como cita final, diría que me importa más fzf que emacs o vim, me encantaría tener un editor que esté completamente basado en fzf


-9

En primer lugar, Vi (realización original) no se usa hoy. Lo que dices es una derivación de Vim.

Para ampliar la funcionalidad de Vim debe volver a compilar Vim, no Emacs.

Emacs tiene Vim en sí mismo (modo viper).

Emacs generalmente necesita instalación manual, Vim generalmente está preinstalado en todos los sistemas operativos tipo Unix (pero si tiene acceso ssh al modo de host vagabundo gane Vim :)

Si prueba Vim, odia a Emacs, así que comience desde Emacs primero.

Lea también http://www.dina.dk/~abraham/religion/vi-tutorial.html (enlace hacia abajo, así que use este )

Otra búsqueda en hxxp: //en.wikipedia.org/wiki/Editor_war


8
No necesita recompilar vim para extenderlo. Ni siquiera necesita salir de vim.
demasiado php

1
¿Tiene vimscript / Python / Ruby / etc acceso a todas las estructuras internas de Vim? ¿Si la base de código del editor ayuda a hacer una extensión o complejidad de extensión en un nivel de complejidad de EDITOR?
gavenkoa

1
Gran parte de los scripts de Vim tienen gusto de los MACROS intelectuales. Para extender Vim necesita complementos ((
gavenkoa

1
Vi no se usa?!?! ¿Qué? ¿Se considera nvi como original? ¿O un 'vi tradicional'? Muchos sistemas como FreeBSD, ArchLinix incluyen el vi o nvi tradicional y estoy agradecido por eso. Algunos sistemas como Debian van con vim que está en modo compatible por defecto (se siente casi como vi tradicional)
Alex

1
@gavenkoa, estoy totalmente de acuerdo con Alex, obviamente nunca has probado un sistema que requiera instalación manual como Gentoo, algunos BSD o Arch Linux. Además, «si prueba Vim, odia a Emacs, así que comience desde Emacs primero». me haría probar VIM primero, y usted también, si piensa un poco. Eso me recuerda a las personas que dicen no probar primero la programación funcional. Estoy triste porque no lo intenté antes ...
JMCF125
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.