Amélioration de l'indentation et de la navigation dans le code source de l'assembly

13

Quand j'écris du code C ou Java, c'est extrêmement régulier, mais avec assembly ( asm-mode), c'est tellement désorganisé.

J'utilise auto-completeet yasnippet. J'ai créé des extraits de code et je les utilise, mais l'organisation du code et le retrait sont désorganisés.

Quel (s) paquet (s) m'aiderait:

  • indenter facilement le code et les commentaires correctement, afin que je puisse voir ce que fait chaque morceau de code;
  • naviguer dans cette grande masse de code, donc je peux facilement sauter entre des morceaux de code?
Vivian Maya
la source
3
Veuillez essayer de rendre votre question plus précise. Par exemple: que pensez-vous asm-modedevrait faire, mais ne le fait pas? (Quelles fonctionnalités manquent?)
Constantine
2
L' EmacsWiki a quelques options répertoriées pour l'assemblage. Mais veuillez modifier votre question pour être plus précis sur le problème et ce que vous avez fait jusqu'à présent. "Tout paquet utile" couvre beaucoup de terrain.
Dan
Pourquoi fermer cette question? Faire fonctionner l'indentation ( asm-modese comporte différemment de tout le reste) et configurer un environnement décent (sauter, compléter le code) est un concert valide.
Tu Do
1
Pour les utilisateurs qui souhaitaient que cette question soit rouverte, veuillez consulter cette méta-discussion . Aidez-nous à nettoyer la question et à la clarifier, sinon il y a une chance non négligeable que d'autres utilisateurs votent pour la refermer.
Dan

Réponses:

11

Utilisez simplement le intégré asm-mode. Il vous donne la coloration syntaxique pour tous les langages d'assemblage. gas-modene fait pas cela et n'est pas utilisable avec la syntaxe AT&T.

Si vous souhaitez définir une indentation pour asm-mode, notez que vous ne pouvez pas utiliser tab-widthmais tab-stop-listqui spécifie les espaces que 1 tab, 2 tabs, 3 tabs ... peuvent afficher:

(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'exemple ci-dessus signifie que le premier onglet a 4 espaces, le 2ème onglet (à côté du premier onglet) a 8 espaces, le 3ème onglet (à côté du deuxième onglet) a 12 espaces ... et ainsi de suite.

Vous pouvez également générer la liste comme ceci:

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

number-sequencegénère une liste de nombres, avec le numéro de départ 2(le premier argument) jusqu'à 60(le deuxième argument), chaque nombre diffère par 2le nombre à côté de lui. Et n'oubliez pas de vous lier newline-and-indentà RET, donc Emacs se met automatiquement en retrait pour vous.

Si vous voulez sauter, utilisez des Ctags comme ceci:

ctags -e -R

-esignifie générer une base de données de balises à utiliser par Emacs. -Rsignifie générer de manière récursive des balises pour les fichiers dans les sous-répertoires à partir de la racine du projet.

Après cela, vous pouvez utiliser helm-etags-selectpour sauter ou un autre etagsclient dans Emacs si vous n'utilisez pas Helm.

EDIT : Voici un exemple de configuration:

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

Vous pouvez également avoir une complétion de base company-completeen appuyant sur S-TAB:

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

Vous pouvez utiliser <tab>pour déclencher l'achèvement car les deux <tab>et M-iexécuter la même commande tab-to-tab-stopqui insère des espaces ou des tabulations dépend de votre paramètre de indent-tabs-mode. La bonne chose avec company-modeest que vous obtenez une brève description du candidat actuellement mis en évidence dans le mini-tampon, si disponible. Par exemple, si vous avez une définition comme celle-ci:

KeyStrokes  word    0

Lorsque vous déplacez le curseur sur KeyStrokescandidat, il s'imprime word 0dans le mini-tampon.

Tu Do
la source