Migliore rientro e navigazione nel codice sorgente dell'assembly


13

Quando scrivo codice C o Java è estremamente regolare, ma con assembly ( asm-mode), è così disorganizzato.

Sto usando auto-completee yasnippet. Ho creato frammenti e li sto usando, ma l'organizzazione del codice e il rientro sono disorganizzati.

Quali pacchetti mi aiuterebbero:

  • indentro facilmente il codice e i commenti correttamente, in modo che io possa vedere cosa sta facendo ogni pezzo di codice;
  • navigare in quella grande massa di codice, così posso facilmente saltare tra pezzi di codice?

3
Prova a rendere la tua domanda più specifica. Ad esempio: cosa pensi che asm-modedovrebbe fare, ma non? (Quali funzionalità mancano?)
Costantino,

2
L'EmacsWiki ha alcune opzioni elencate per il montaggio. Ma modifica la tua domanda per essere più specifici sul problema e su ciò che hai fatto finora. "Qualsiasi pacchetto utile" copre molto terreno.
Dan

Perché chiudere questa domanda? Far funzionare i rientri ( asm-modesi comporta diversamente da tutto il resto) e configurare un ambiente decente (saltare, completare il codice) è un concerto valido.
Tu Do,

1
Per gli utenti che desiderano riaprire questa domanda, consulta questa meta discussione . Aiutate a ripulire la domanda e a chiarirla, altrimenti c'è una possibilità non banale che altri utenti voteranno per chiuderla di nuovo.
Dan

Risposte:


11

Basta usare il built-in asm-mode. Ti dà l'evidenziazione della sintassi per qualsiasi linguaggio di assemblaggio. gas-modenon lo fa e non è utilizzabile con la sintassi AT&T.

Se si desidera impostare il rientro per asm-mode, tenere presente che non è possibile utilizzare tab-widthma tab-stop-listche specifica gli spazi che possono essere visualizzati da 1 scheda, 2 schede, 3 schede ...

(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))

L'esempio sopra indica che la scheda del pugno ha 4 spazi, la seconda scheda (accanto alla prima scheda) ha 8 spazi, la terza scheda (accanto alla seconda scheda) ha 12 spazi ... e così via.

Puoi anche generare l'elenco in questo modo:

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

number-sequencegenera un elenco di numeri, con il numero iniziale 2(il primo argomento) fino a 60(il secondo argomento), ogni numero differisce dal 2numero accanto ad esso. E ricorda di legarti newline-and-indenta RET, quindi Emacs inserisce automaticamente il rientro per te.

Se vuoi saltare, usa Ctags in questo modo:

ctags -e -R

-esignifica generare un database di tag che sarà utilizzato da Emacs. -Rsignifica generare ricorsivamente tag per file in sottodirectory dalla radice del progetto.

Dopodiché, puoi usare helm-etags-selectper saltare o un altro etagsclient in Emacs se non usi Helm.

EDIT : ecco una configurazione di esempio:

(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)

Puoi anche avere un completamento di base company-completepremendo quando S-TAB:

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

È possibile utilizzare <tab>per attivare il completamento perché entrambi <tab>ed M-ieseguire lo stesso comando tab-to-tab-stopche inserisce spazi o schede dipende dalle impostazioni di indent-tabs-mode. La cosa bella company-modeè che puoi ottenere una breve descrizione del candidato attualmente evidenziato nel minibuffer, se disponibile. Ad esempio, se hai una definizione come questa:

KeyStrokes  word    0

Quando si sposta il cursore sul KeyStrokescandidato, questo viene stampato word 0nel minibuffer.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.