使用 Emacs 漂亮地打印 ActionScript 3.0

Posted

技术标签:

【中文标题】使用 Emacs 漂亮地打印 ActionScript 3.0【英文标题】:Use Emacs to pretty-print ActionScript 3.0 【发布时间】:2011-05-05 03:41:25 【问题描述】:

我一直在尝试在批处理模式下使用 emacs 来漂亮地打印 ActionScript 文件,但它并没有完全达到我的预期。 我从这里下载了 actionscript-mode.el 和 as-config.el http://blog.pettomato.com/?p=12 并将它们放入我的主目录,将 actionscript-mode.el 复制到我的工作目录中。 然后我也在我的主目录中创建了一个文件“.emacs”,内容如下:

(load "~/actionscript-mode.el")
(actionscript-mode)
(indent-region 0 (buffer-size)  nil)
(save-buffer)

然后我转到格式不正确的 .as 文件的目录并在命令行上运行此命令:

emacs -batch WrongFormat.as -l ~/.emacs -l actionscript-mode.el

And I get:

Loading /Users/pnm/actionscript-mode.el (source)...
Indenting region...
Indenting region... done
(No changes need to be saved)

现在的问题是:

如何让 emacs 重新格式化花括号而不是换行? 我越来越绝望,我不确定用木棍敲击 50 次是否是执行代码样式指南的好方法。

【问题讨论】:

【参考方案1】:

您在这里遇到了几个问题。我会先处理小问题。

    .emacs 不适合放置批处理命令。 .emacs 文件是您的个人配置文件,每当您以交互方式启动 Emacs 时都会运行该文件。您不希望批处理命令以交互方式执行。

    当 Emacs 使用 --batch 执行时,“action arguments”(如 -l)按从左到右的顺序计算。因此,在您已经加载并保存文件之后再做-l actionscript-mode.el 为时已晚。

    更好的 Emacs 编码风格是调用 (point-min) 来获取缓冲区(可见部分)的开头,并调用 (point-max) 来获取缓冲区的结尾。 (在这种情况下没什么大不了的,但把事情做对很好。)

所以你的 shell 脚本应该如下所示。 (为了最清楚起见,我已经完整地写出了所有选项。)

emacs --batch \
      --load=~/actionscript-mode.el \
      --visit=FILE \
      --funcall=actionscript-mode \
      --execute='(indent-region (point-min) (point-max))' \
      --funcall=save-buffer

现在,进入主要问题。您想移动左大括号,使它们出现在行尾,而不是行首。命令indent-region 不会为您执行此操作——它只会为您提供的行添加或删除缩进。因此,对于您的应用程序,您实际上需要编辑文件。例如,您可以将此参数添加到批处理脚本中(在调用 actionscript-mode 之后和调用 indent-region 之前):

      --execute='(replace-regexp " *\n *" " ")' 

这有点粗略,可能会错误地移动一些大括号(例如,字符串中的大括号),但对于您的应用程序来说可能已经足够了。如果仍有问题,请再次询问。

【讨论】:

以上是关于使用 Emacs 漂亮地打印 ActionScript 3.0的主要内容,如果未能解决你的问题,请参考以下文章

如何漂亮地打印嵌套字典?

如何使用 Go 漂亮地打印 JSON?

如何使用缩进将 HTML 漂亮地打印到文件中

使用 JavaScript 漂亮地打印 JSON

使用 JavaScript 漂亮地打印 JSON

漂亮地打印整个 Pandas 系列/DataFrame