Краще відступ та навігація у вихідному коді збірки


13

Коли я пишу код C або Java, це надзвичайно регулярно, але при складанні ( asm-mode) це так неорганізовано.

Я використовую auto-completeі yasnippet. Я створив фрагменти і використовую їх, але організація коду та відступ неорганізовані.

Який пакет (и) міг би мені допомогти:

  • легко вводити код відступу та коментарі належним чином, щоб я міг бачити, що робить кожен фрагмент коду;
  • перейдіть по цій великій масі коду, щоб я міг легко переходити між фрагментами коду?

3
Спробуйте зробити своє запитання більш конкретним. Наприклад: що, на вашу думку, asm-modeмає робити, а чи ні? (Які риси відсутні?)
Костянтин

2
У EmacsWiki є декілька перелічених варіантів для складання. Але, будь ласка, відредагуйте своє питання, щоб бути більш конкретними щодо проблеми та того, що ви робили досі. "Будь-який корисний пакет" охоплює багато ґрунту.
Дан

Навіщо закривати це питання? Зробити відступ ( asm-modeпрацює по-різному до всього іншого) та налаштувати гідне середовище (стрибати навколо, заповнення коду) - це дійсний концерт.
Ту До

1
Користувачі, які хотіли заново відкрити це запитання, перегляньте цю мета-дискусію . Будь ласка, допоможіть прибрати питання та уточнити його, інакше існує нетривіальний шанс, що інші користувачі проголосують за його повторне закриття.
День

Відповіді:


11

Просто використовуйте вбудований asm-mode. Це дає виділення синтаксису для будь-яких мов складання. gas-modeне робить цього і не використовується в синтаксисі AT&T.

Якщо ви хочете встановити відступи asm-mode, зауважте, що ви не можете використовувати, tab-widthале tab-stop-listвказує пробіли, які можуть відображатись 1 табл., 2 вкладки, 3 вкладки ...

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

Вищеописаний приклад означає, що вкладка кулака має 4 пробіли, 2-а вкладка (поруч із першою вкладкою) має 8 пробілів, 3-я вкладка (поруч із другою вкладкою) має 12 пробілів ... тощо.

Ви також можете створити такий список:

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

number-sequenceгенерує список числа, з початковим номером 2(перший аргумент) до 60(другий аргумент), кожне число відрізняється 2на число поряд з ним. І не забудьте прив’язати newline-and-indentдо RET, тому Emacs автоматично відступить для вас.

Якщо ви хочете стрибати навколо, використовуйте подібні Ctags:

ctags -e -R

-eозначає генерувати базу даних тегів, яку використовуватиме Emacs. -Rозначає рекурсивно генерувати теги для файлів у підкаталогах з кореня проекту.

Після цього ви можете використовувати helm-etags-selectдля стрибків або іншого etagsклієнта в Emacs, якщо ви не використовуєте Helm.

EDIT : Ось приклад налаштування:

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

Ви також можете мати базове завершення company-completeпри натисканні S-TAB:

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

Ви можете використовувати <tab>для запуску завершення, оскільки обидва <tab>та M-iвиконують одну і ту ж команду, tab-to-tab-stopяка вставляє пробіли чи вкладки, залежить від вашого параметра indent-tabs-mode. Приємним company-modeє те, що ви отримуєте короткий опис кандидата, який зараз виділяється, у мінібуфері, якщо він є. Наприклад, якщо у вас є таке визначення:

KeyStrokes  word    0

Коли ви переміщуєте курсор на KeyStrokesкандидата, він друкує word 0у мінібуфері.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.