Bessere Einrückung und Navigation im Assembly-Quellcode

13

Wenn ich C- oder Java-Code schreibe, ist er extrem regelmäßig, aber mit assembly ( asm-mode) ist er so unorganisiert.

Ich benutze auto-completeund yasnippet. Ich habe Snippets erstellt und verwende sie, aber die Code-Organisation und die Einrückung sind unorganisiert.

Welche Pakete würden mir helfen:

  • Einrücken von Code und Kommentaren, damit ich sehen kann, was die einzelnen Codeteile tun.
  • Durchsuchen Sie diese große Codemasse, damit ich problemlos zwischen Codeteilen wechseln kann.
Vivian Maya
quelle
3
Bitte versuchen Sie, Ihre Frage genauer zu formulieren. Zum Beispiel: Was denkst du asm-modesollte tun, aber nicht? (Welche Funktionen fehlen?)
Constantine
2
Im EmacsWiki sind einige Optionen für die Montage aufgelistet. Bearbeiten Sie Ihre Frage jedoch, um genauere Informationen zum Problem und zu Ihren bisherigen Aktivitäten zu erhalten. "Jedes nützliche Paket" hat viel zu bieten.
Dan
Warum diese Frage schließen? Einrücken funktioniert ( asm-modeverhält sich anders als alles andere) und Konfigurieren einer anständigen Umgebung (Herumspringen, Code-Vervollständigung) ist ein gültiges Konzert.
Tu Do
1
Weitere Informationen zu Benutzern, die diese Frage erneut öffnen möchten, finden Sie in dieser Metadiskussion . Bitte helfen Sie dabei, die Frage zu bereinigen und zu klären. Andernfalls besteht eine nicht unbedeutende Chance, dass andere Benutzer abstimmen, um sie wieder zu schließen.
Dan

Antworten:

11

Verwenden Sie einfach die eingebaute asm-mode. Sie erhalten eine Syntaxhervorhebung für alle Assemblersprachen. gas-modetut dies nicht und ist mit der AT & T-Syntax nicht verwendbar.

Wenn Sie Satz Einbuchtung wollen asm-mode, beachten Sie, dass Sie nicht verwenden können , tab-widthaber tab-stop-listdass gibt an Räume , dass Registerkarte 1, 2 Registerkarten, 3 Registerkarten ... können angezeigt werden :

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

Das obige Beispiel bedeutet, dass der erste Tab 4 Leerzeichen hat, der zweite Tab (neben dem ersten Tab) 8 Leerzeichen, der dritte Tab (neben dem zweiten Tab) 12 Leerzeichen ... und so weiter.

Sie können die Liste auch folgendermaßen generieren:

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

number-sequenceErzeugt eine Liste von Zahlen mit der Startnummer 2(das erste Argument) bis 60(das zweite Argument). Jede Zahl unterscheidet sich von 2der Zahl daneben. Und denken Sie daran, sich newline-and-indentan RET zu binden , damit Emacs automatisch Einrückungen für Sie vornimmt.

Wenn Sie herumspringen möchten, verwenden Sie Ctags wie folgt:

ctags -e -R

-ebedeutet, eine Tag-Datenbank zu generieren, die von Emacs verwendet wird. -Rbedeutet, rekursiv Tags für Dateien in Unterverzeichnissen aus dem Projektstamm zu generieren.

Danach können Sie in Emacs herumspringen helm-etags-selectoder einen anderen etagsClient verwenden, wenn Sie Helm nicht verwenden.

BEARBEITEN : Hier ist ein Beispiel-Setup:

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

Sie können die Grundvervollständigung auch durch company-completeDrücken von S-TAB:

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

Sie können <tab>den Abschluss mit auslösen, da beide <tab>und M-iderselbe Befehl tab-to-tab-stop, mit dem Leerzeichen oder Tabulatoren eingefügt werden, von Ihrer Einstellung von abhängen indent-tabs-mode. Das Schöne daran company-modeist, dass Sie eine kurze Beschreibung des aktuell markierten Kandidaten im Minipuffer erhalten, falls verfügbar. Wenn Sie beispielsweise eine Definition wie diese haben:

KeyStrokes  word    0

Wenn Sie den Cursor auf KeyStrokesKandidat bewegen , wird er word 0im Minipuffer gedruckt.

Tu Do
quelle