Улучшенный отступ и навигация в исходном коде сборки


13

Когда я пишу код на C или Java, это очень регулярно, но с Assembly ( 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.

РЕДАКТИРОВАТЬ : Вот пример установки:

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