Mejor sangría y navegación en el código fuente del ensamblaje


13

Cuando escribo código C o Java es extremadamente regular, pero con ensamblado ( asm-mode), es muy desorganizado.

Estoy usando auto-completey yasnippet. Creé fragmentos y los estoy usando, pero la organización del código y la sangría están desorganizados.

Qué paquete (s) me ayudarían:

  • sangra fácilmente el código y los comentarios correctamente, para que pueda ver qué está haciendo cada parte del código;
  • navegar esa gran masa de código, para que pueda saltar fácilmente entre piezas de código?

3
Intenta hacer tu pregunta más específica. Por ejemplo: ¿qué crees que asm-modedebería hacer, pero no lo hace? (¿Qué características faltan?)
Constantine

2
El EmacsWiki tiene algunas opciones listadas para ensamblar. Pero edite su pregunta para ser más específico sobre el problema y lo que ha hecho hasta ahora. "Cualquier paquete útil" cubre mucho terreno.
Dan

¿Por qué cerrar esta pregunta? Hacer que la sangría funcione (se asm-modecomporta de manera diferente a todo lo demás) y configurar un entorno decente (saltar, completar el código) es un concierto válido.
Tu Do

1
Para los usuarios que desean que se vuelva a abrir esta pregunta, consulte esta meta discusión . Ayude a limpiar la pregunta y aclararla, de lo contrario, es una posibilidad no trivial de que otros usuarios voten para cerrarla nuevamente.
Dan

Respuestas:


11

Solo usa el incorporado asm-mode. Le ofrece resaltado de sintaxis para cualquier lenguaje ensamblador. gas-modeno hace eso y no se puede usar con la sintaxis de AT&T.

Si desea establecer la sangría para asm-mode, tenga en cuenta que no puede usar tab-widthpero tab-stop-listque especifica espacios que pueden mostrar 1 pestaña, 2 pestañas, 3 pestañas ...

(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
                      64 68 72 76 80 84 88 92 96 100 104 108 112
                      116 120))

El ejemplo anterior significa que la pestaña de puño tiene 4 espacios, la segunda pestaña (al lado de la primera pestaña) tiene 8 espacios, la tercera pestaña (al lado de la segunda pestaña) tiene 12 espacios ... y así sucesivamente.

También puede generar la lista de esta manera:

(setq tab-stop-list (number-sequence 2 60 2))

number-sequencegenera una lista de números, con el número inicial 2(el primer argumento) hasta 60(el segundo argumento), cada número difiere según 2el número al lado. Y recuerde vincularse newline-and-indenta RET, por lo que Emacs sangra automáticamente por usted.

Si quieres saltar, usa Ctags como este:

ctags -e -R

-esignifica generar una base de datos de etiquetas para ser utilizada por Emacs. -Rsignifica generar recursivamente etiquetas para archivos en subdirectorios desde la raíz del proyecto.

Después de eso, puede usar helm-etags-selectpara saltar u otro etagscliente en Emacs si no usa Helm.

EDITAR : Aquí hay una configuración de muestra:

(require 'asm-mode)
(add-hook 'asm-mode-hook (lambda ()
                           (setq indent-tabs-mode nil) ; use spaces to indent
                           (electric-indent-mode -1) ; indentation in asm-mode is annoying
                           (setq tab-stop-list (number-sequence 2 60 2))))

(define-key asm-mode-map (kbd "<ret>") 'newline-and-indent)
(define-key asm-mode-map (kbd "M-.") 'helm-etags-select)

También puede tener finalización básica con company-completeal presionar S-TAB:

(define-key asm-mode-map (kbd "<backtab>") 'company-complete)

Puede usar <tab>para activar la finalización porque ambos <tab>y M-iejecutar el mismo comando tab-to-tab-stopque inserta espacios o pestañas depende de su configuración de indent-tabs-mode. Lo bueno company-modees que obtienes una breve descripción del candidato actualmente resaltado en el minibúfer, si está disponible. Por ejemplo, si tiene una definición como esta:

KeyStrokes  word    0

Cuando mueve el cursor al KeyStrokescandidato, se imprime word 0en el minibúfer.


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.