汇编源代码中更好的缩进和导航


13

当我编写C或Java代码时,它非常有规律,但是对于汇编(asm-mode),它是如此混乱。

我正在使用auto-completeyasnippet。我创建了代码片段并正在使用它们,但是代码的组织和缩进是杂乱无章的。

哪些软件包可以帮助我:

  • 轻松正确地缩进代码和注释,以便我可以看到每段代码在做什么;
  • 浏览大量代码,因此我可以轻松地在代码段之间跳转?

3
请尝试使您的问题更具体。例如:您认为asm-mode应该做什么,但不应该做什么?(缺少哪些功能?)
Constantine

2
EmacsWiki有装配列出了一些选项。但是,请编辑您的问题,以更具体地说明问题以及您到目前为止所做的事情。“任何有用的软件包”涵盖了很多基础。
Dan

为什么要结束这个问题?使缩进起作用(asm-mode行为不同于其他事物)并配置一个不错的环境(跳转,代码完成)是有效的选择。
Tu Do

1
对于希望重新打开此问题的用户,请参阅此元讨论。请帮助清理问题并加以澄清,否则其他用户将投票再次关闭它,这是一次非常重要的机会。

Answers:


11

只需使用内置的asm-mode。它使您可以突出显示任何汇编语言的语法。gas-mode不会这样做,并且不能与AT&T语法一起使用。

如果要为设置缩进asm-mode,请注意,您不能使用缩进,tab-widthtab-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个空格,第二个选项卡(第一个选项卡旁边)有8个空格,第三个选项卡(第二个选项卡旁边)有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 ,则可以使用Emacs中的helm-etags-select另一个etags客户端跳来跳去。

编辑:这是一个示例设置:

(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在迷你缓冲区中打印。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.