Pregunta

Actualmente, mi flujo de trabajo con Emacs cuando estoy codificando en C o C++ implica tres ventanas.El más grande a la derecha contiene el archivo con el que estoy trabajando.La izquierda está dividida en dos, la parte inferior es un shell que uso para escribir comandos de compilación o creación, y la parte superior suele ser algún tipo de documentación o archivo README que quiero consultar mientras trabajo.Ahora sé que hay algunos usuarios de Emacs bastante expertos y tengo curiosidad por saber qué otros Emacs son funcionalmente útiles si la intención es usarlos como un IDE completo.Específicamente, la mayoría de los IDE suelen cumplir estas funciones de una forma u otra:

  • editor de código fuente
  • Compilador
  • Depuración
  • Búsqueda de documentación
  • Control de versiones
  • Funciones OO como búsqueda de clases e inspector de objetos

Para algunos de ellos, es bastante obvio cómo Emacs puede adaptarse a estas funciones, pero ¿qué pasa con el resto?Además, si hay que centrarse en un lenguaje específico, diría que debería ser C++.

Editar: Un usuario señaló que debería haber sido más específico cuando dije "¿y el resto?".Principalmente tenía curiosidad por el control de versiones eficiente, así como por la búsqueda de documentación.Por ejemplo, en SLIME es bastante fácil realizar una búsqueda rápida de hiperespecificaciones en una función Lisp.¿Existe una forma rápida de buscar algo en la documentación STL de C++ (si olvidé la sintaxis exacta de mapa_hash, Por ejemplo)?

¿Fue útil?

Solución

Tendrás que ser específico en cuanto a lo que quieres decir con "el resto".Excepto por el inspector de objetos (que yo sepa), emacs hace todo lo anterior con bastante facilidad:

  • editor (obvio)
  • compilador - simplemente ejecute M-x compile e ingrese su comando de compilación.A partir de ahí, puedes simplemente M-x compile y use el valor predeterminado.Emacs capturará los errores del compilador C/C++ (funciona mejor con GCC) y le ayudará a navegar a líneas con advertencias o errores.
  • Depuración: de manera similar, cuando desee depurar, escriba M-x gdb y creará un buffer gdb con enlaces especiales
  • Búsqueda de documentación: emacs tiene excelentes enlaces CScope para la navegación de código.Para otra documentación:Emacs también tiene un lector de páginas de manual y, para todo lo demás, está la web y los libros.
  • control de versiones: hay muchos enlaces de Emacs para varios backends de VCS (me vienen a la mente CVS, SCCS, RCS, SVN, GIT)

Editar:Me doy cuenta de que mi respuesta sobre la búsqueda de documentación realmente se refería a la navegación del código.Aquí hay información más precisa:

Sin duda, la búsqueda en Google revelará más ejemplos.

Como muestra el segundo enlace, se pueden buscar funciones (y lo que sea) en otra documentación, incluso si no son compatibles de fábrica.

Otros consejos

tengo que recomendar Navegador de código Emacs como un entorno de estilo IDE más "tradicional" para emacs.

EDITAR:ahora también lo recomiendo Magit muy por encima de la interfaz VCS estándar en emacs.

En lugar de ejecutar un comando make en la ventana del shell, ¿ha probado la compilación M-x?Ejecutará su comando make, mostrará errores y, en muchos casos, hará que sea muy fácil saltar a la línea de código que causó el error si la salida incluye nombres de archivos y números de línea.

Si eres fanático de los IDE, es posible que también quieras consultar el paquete de barra de velocidad de emacs (barra de velocidad M-x).Y, si aún no lo ha hecho, aprenda cómo usar tablas de etiquetas para navegar por su código.

Hay rincones de emacs que, una vez descubiertos, te hacen más productivo de formas que nunca imaginaste.Como otros han mencionado, usar etiquetas es una forma fantástica y rápida de ampliar su código fuente y usar M-/ (dabbrev-expand) a menudo hace exactamente lo que espera al completar un nombre de variable.

Usar ocurre es útil para obtener un búfer con todas las apariciones de una expresión regular en un búfer.Esto es realmente útil al refactorizar código y buscar fragmentos de código o usos de variables, o si usa marcadores TODO en sus archivos fuente y desea visitarlos todos.

Las funciones fluir líneas, ordenar campos numéricos, reemplazar expresiones regulares y rectángulos pueden ser realmente útiles para tomar un volcado de alguna herramienta y convertirlo en datos útiles, como un programa elisp o una hoja de cálculo delimitada por comas.

Escribí una página sobre IDE como cosas que puedes hacer con emacs

http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html

Aprender elisp es otra excelente manera de responder usted mismo qué más puede hacer emacs más allá de lo que puede hacer un IDE típico.

Por ejemplo, he escrito en un blog sobre cómo escribir funciones auxiliares de Perforce como culpar (escribir la tuya propia significa que puedes hacer que se comporte exactamente como quieras)...

http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html

También escribí código que crea dinámicamente comentarios para una función en un punto que coincide con los estándares de codificación con los que estoy trabajando.

Ninguno de mis códigos elisp es particularmente bueno, y la mayor parte ya existe en bibliotecas, pero es realmente útil poder hacer que emacs haga cosas personalizadas que surgen durante un día laboral.

Puede encontrar una descripción detallada de la integración de emacs y control de versiones en mi sitio.También estoy trabajando en un artículo sobre el uso de Emacs como entorno de desarrollo para muchos lenguajes: C/C++, Java, Perl, Lisp/Scheme, Erlang, etc.

Para el control de versiones, hay varias cosas que puede utilizar, dependiendo del sistema de control de versiones que utilice.Pero algunas de las funciones son comunes a todos ellos.

vc.el es la forma integrada de manejar el control de versiones a nivel de archivo.Tiene backends para la mayoría de los sistemas de control de versiones.Por ejemplo, el backend de Subversion viene con Emacs, y hay backends de git y otros disponibles de otras fuentes.

El comando más útil es C-xvv (vc-next-action) que realiza la siguiente acción apropiada para el archivo que está visitando.Esto podría significar actualizar desde el repositorio o confirmar sus cambios, vc.el también vuelve a vincular C-x C-q para registrar y retirar archivos si está utilizando un sistema que lo necesita (como RCS).

Otros comandos muy útiles son Cxvl y C-x v = que le muestran el registro y la diferencia actual del archivo que está utilizando.

Pero para lograr una productividad real, debe evitar el uso de los comandos vc.el de un solo archivo excepto para cosas simples.Hay varios paquetes que pueden brindarle una descripción general del estado de todo su árbol y brindarle más poder, sin mencionar la capacidad de crear confirmaciones coherentes que abarquen varios archivos.

La mayoría de estos están fuertemente influenciados o basados ​​en el original. pcl-cvs/pcv para CVS.Incluso hay dos que vienen con subversión, psvn.el y dsvn.el.Hay paquetes para git, etc.

Bien, todos aquí están dando consejos perfectos para hacer de emacs un excelente IDE.

Pero cualquiera debe tener en cuenta que, cuando personaliza sus emacs con muchas extensiones (especialmente con aquellas para verificación de tipos sobre la marcha, búsquedas de definiciones de funciones, etc.), sus emacs se cargarán muy, muy lento para un editor.

Para solucionar este problema, recomiendo encarecidamente utilizar emacs en server mode.

Es bastante sencillo de usar, no es necesario personalizar el archivo de inicio.Sólo necesitas iniciar emacs en modo demonio;

emacs --daemon

Esto creará un servidor emacs, luego podrá conectarlo desde la terminal o desde la interfaz gráfica de usuario.También recomendaría crear algunos alias para que sea más fácil llamar.

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"

De esta manera, emacs se activará incluso más rápido que gedit, lo prometo.

El único problema posible aquí es que si está ejecutando el demonio emacs desde su usuario ocasional, probablemente no pueda conectar el servidor emacs como root.

Entonces, si necesita abrir un archivo que tenga acceso de root;usar tramp en cambio.Simplemente ejecute su cliente emacs con su usuario normal y abra archivos como este;

C-x C-f
/sudo:root@localhost/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:root@...` 

Esto me hizo la vida más fácil, puedo abrir mi IDE de Python personalizado y pesado en milisegundos de esta manera.Es posible que también desee agregar emacs --daemon al inicio de su sistema o crear un archivo de escritorio para emacsclient.Eso depende de usted.

Puede encontrar más información sobre el demonio y el cliente de emacs en wiki;

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient

Estoy de acuerdo en que deberías aprender sobre la compilación de M-x (vincular eso y el siguiente error de M-x a una secuencia de teclas corta).

Obtenga información sobre los enlaces para el control de versiones (p. ej.vc-diff, vc-siguiente-acción, etc.)

Busque en los registros.No solo puede recordar ubicaciones en los buffers, sino también configuraciones de ventanas completas (C-x r w - configuración-de-ventana-para-registrarse).

Un punto de partida (que puede no ser obvio) para explorar las características VC de Emacs es M-x vc-siguiente-acción.

Realiza la "siguiente operación de control de versión lógica" en el archivo actual, dependiendo del estado del archivo y del backend de VC.Entonces, si el archivo no está bajo control de versiones, lo registra, si el archivo ha sido modificado, los cambios se envían, etc.

Cuesta un poco acostumbrarse, pero lo encuentro muy útil.

La combinación de teclas predeterminada es C-xvv

Hay una TFS.el para la integración de emacs en Microsoft TFS.Funciona con cualquier TFS, incluido el TFS que ejecuta Codeplex.com.

Pasos básicos para la configuración:

  1. Coloque tfs.el en su ruta de carga.

  2. En su archivo .emacs:

    (require 'tfs)
    (setq tfs/tf-exe  "c:\\vs2008\\common7\\ide\\tf.exe")
    (setq tfs/login "/login:domain\\userid,password")
          -or-
    (setq tfs/login (getenv "TFSLOGIN"))  ;; if you have this set
    
  3. También en su archivo .emacs, configure combinaciones de teclas locales o globales para los comandos tfs.al igual que:

    (global-set-key  "\C-xvo" 'tfs/checkout)
    (global-set-key  "\C-xvi" 'tfs/checkin)
    (global-set-key  "\C-xvp" 'tfs/properties)
    (global-set-key  "\C-xvr" 'tfs/rename)
    (global-set-key  "\C-xvg" 'tfs/get)
    (global-set-key  "\C-xvh" 'tfs/history)
    (global-set-key  "\C-xvu" 'tfs/undo)
    (global-set-key  "\C-xvd" 'tfs/diff)
    (global-set-key  "\C-xv-" 'tfs/delete)
    (global-set-key  "\C-xv+" 'tfs/add)
    (global-set-key  "\C-xvs" 'tfs/status)
    (global-set-key  "\C-xva" 'tfs/annotate)
    (global-set-key  "\C-xvw" 'tfs/workitem)
    

compilar, error siguiente y error anterior son comandos bastante importantes para el desarrollo de C++ en Emacs (también funciona muy bien en la salida grep).Las etiquetas electrónicas, la tabla de etiquetas de visita y la etiqueta de búsqueda también son importantes.complete.el es uno de los grandes hacks no reconocidos del siglo XX y puede acelerar el hackeo de C++ en un orden de magnitud.Ah, y no nos olvidemos de ediff.

Todavía tengo que aprender a usar el control de versiones sin visitar un shell, pero ahora que ejecuto confirmaciones con mucha más frecuencia (con git), probablemente tendré que hacerlo.

También puedes encontrar barra de pestañas útil.Emula el único comportamiento que me perdí al pasar de Eclipse a Emacs.Ligado a "," y "." Para moverse a la barra anterior y siguiente, la reviva de cambiar el búfer por Ctrl-X B todo el tiempo.

Lamentablemente, la página web mencionada no proporciona la versión correcta para descargar.La mayoría de las versiones de Ubuntu, sin embargo, lo entregan en sus paquetes emacs-goodies.

Yo uso emacs en Windows.El módulo de compilación es bueno, pero quería que la compilación fuera más inteligente con respecto a la línea de comando de compilación que sugiere. Es posible utilizar "Variables de archivo" para especificar compile-command, pero quería algo un poco más inteligente que eso.Entonces escribí una pequeña función para ayudar.Adivina el comando de compilación a usar, para avisar al usuario, cuando se ejecuta compile.

La función de conjetura busca un archivo vbproj, csproj o sln y, si lo encuentra, sugiere msbuild.Luego mira el nombre del archivo del búfer y, dependiendo de eso, sugiere diferentes cosas.Un archivo .wxs significa que es un proyecto WIX y probablemente quieras crear un MSI, por lo que la lógica de conjetura sugiere un comando nmake para el MSI.Si se trata de un módulo de Javascript, entonces la sugerencia es ejecutar jslint-for-wsh.js para eliminar el archivo .js.Como alternativa, sugiere nmake.

El código que uso se ve así:

(defun cheeso-guess-compile-command ()
  "set `compile-command' intelligently depending on the
current buffer, or the contents of the current directory."
  (interactive)
  (set (make-local-variable 'compile-command)
       (cond
        ((or (file-expand-wildcards "*.csproj" t)
             (file-expand-wildcards "*.vcproj" t)
             (file-expand-wildcards "*.vbproj" t)
             (file-expand-wildcards "*.shfbproj" t)
             (file-expand-wildcards "*.sln" t))
         "msbuild ")

        ;; sometimes, not sure why, the buffer-file-name is
        ;; not set.  Can use it only if set.
        (buffer-file-name
         (let ((filename (file-name-nondirectory buffer-file-name)))
           (cond

            ;; editing a .wxs (WIX Soluition) file
            ((string-equal (substring buffer-file-name -4) ".wxs")
             (concat "nmake "
                     ;; (substring buffer-file-name 0 -4) ;; includes full path
                     (file-name-sans-extension filename)
                     ".msi" ))

            ;; a javascript file - run jslint
            ((string-equal (substring buffer-file-name -3) ".js")
             (concat (getenv "windir")
                     "\\system32\\cscript.exe c:\\users\\cheeso\\bin\\jslint-for-wsh.js "
                     filename))

            ;; something else - do a typical .exe build
            (t
             (concat "nmake "
                     (file-name-sans-extension filename)
                     ".exe")))))
        (t
         "nmake "))))


(defun cheeso-invoke-compile-interactively ()
  "fn to wrap the `compile' function.  This simply
checks to see if `compile-command' has been previously set, and
if not, invokes `cheeso-guess-compile-command' to set the value.
Then it invokes the `compile' function, interactively."
  (interactive)
  (cond
   ((not (boundp 'cheeso-local-compile-command-has-been-set))
    (cheeso-guess-compile-command)
    (set (make-local-variable 'cheeso-local-compile-command-has-been-set) t)))
  ;; local compile command has now been set
  (call-interactively 'compile))

;; in lieu of binding to `compile', bind to my monkeypatched function
(global-set-key "\C-x\C-e"  'cheeso-invoke-compile-interactively)

Intenté hacer esto como "consejo previo" para la función de compilación pero no pude lograr que funcionara satisfactoriamente.Entonces definí una nueva función y la vinculé a la misma combinación de teclas que he estado usando durante compile.


EDITAR ahora hay "compilación-inteligente.el", lo que lleva esta idea un paso más allá.

En la búsqueda de documentación:eso depende de su(s) lenguaje(s) de programación.

Las bibliotecas C y las llamadas al sistema suelen estar documentadas en páginas de manual.Para eso puedes usar M-x man.Algunas cosas pueden documentarse mejor en páginas de información;usar M-x info.

Para elisp en sí, use C-h f.Para Python, use >>> help(<function, class, module>) en el intérprete.

Encuentro que la mayoría de los otros idiomas ofrecen documentación en formato html.Para eso, pruebe con un navegador integrado (yo uso w3m).Establecer su BROWSER variable de entorno a un script contenedor alrededor emacsclient -e "(w3m-goto-url-new-session \"$@\")" (en *nix), en caso de que algo pueda abrir un navegador y desee que se abra dentro de emacs.

Sé que esta es una publicación muy antigua.Pero esta pregunta es válida para principiantes en emacs.

En mi opinión, la mejor manera de usar emacs como ide es usar un protocolo de servidor de idiomas con emacs.Puedes encontrar toda la información sobre los servidores de idiomas en la web enlazada.

Para una configuración rápida, le recomiendo que vaya a esta página. eglot .En mi opinión, eglot hace su trabajo bastante bien.Se integra bien con paquetes de terminación automática como Company.Proporciona referencias de búsqueda y más.

Además, para un depurador, es posible que necesite depuradores específicos para idiomas específicos.Puede utilizar gdb desde emacs.Sólo tipo M-x gdb .

Para compilar su código, es mejor usar comandos de shell.estoy trabajando en este proyecto eproj.Tomará un tiempo completarlo.Pero todo lo que hace es asignar el comando de shell al tipo de proyecto.Y construye tu proyecto a través de Shell.Hace lo mismo para ejecutar el comando.Es posible que necesite ayuda para completar este proyecto.No está listo para usar, pero si sabes un poco de elisp, puedes leer el código.

Aparte de eso, siempre es mejor usar el comando de compilación de emacs.

Para el control de versiones, todavía no he visto ningún otro paquete que pueda igualar el poder de magit.Es específico de git.También para git hay otro paquete git-timemachine, que encuentro muy útil.

La búsqueda de objetos y de clases la proporciona el protocolo del servidor de idiomas.

Se puede utilizar un árbol de proyecto para una interfaz tipo ide con árboles.

También hay una biblioteca de interacción del proyecto llamada proyectil.

Para autocompletar, encuentro modo empresa muy útil.

Realmente se puede hacer que emacs haga cualquier cosa.

En los últimos años, Clang se convirtió en una parte importante del soporte de Emacs C++.Atila Neves habló en la CppCon 2015:"Emacs como IDE de C++"

Es una charla de 16 minutos, donde muestra soluciones para los siguientes temas:

  • Saltar a la definición
  • Autocompletar
  • Resaltado de sintaxis sobre la marcha
  • Buscar archivo en el proyecto

Se pueden encontrar diapositivas. aquí.

Al estilo Unix o X windows, no sé si hay un IDE integrado que sirve para todo.

Para interactuar con depuradores, solo un componente de un IDE, considere realgud.La otra cosa que encuentro útil son analizadores para mensajes de ubicación, de modo que si tiene un seguimiento de la pila de llamadas y desea editar en un lugar particular de la pila de llamadas, esta interfaz de usuario podrá hacerlo.

Con diferencia, este programa podría mejorar.Pero también podría ser útil que la gente trabaje en él para mejorarlo.

Descargo de responsabilidad:yo trabajo en realgud

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top