MATLAB内置的代码格式化实在是太垃圾了,VScode的MATLAB插件所提供的格式化也是一样的鸡肋,它们连最基本的缩进和空格都处理不好, 还是选择一个第三方工具MBeautifier来完成吧。

概述

MBeautifier是一个开源的MATLAB项目,已经几年没更新了,看了一下它的功能比较简单:读取xml配置文件,解析文本,处理缩进和空格等格式化问题。 其实用几个Python脚本也可以达到类似的效果,但是有现成的当然更好,而且用Python去格式化MATLAB代码有点滑稽。

使用

记录一下配置过程:

  • 下载项目的压缩包,在本地解压(例如放在MATLAB安装位置附近),例如D:\ProgramHuge\MATLAB\MBeautifier-master
  • 将路径D:\ProgramHuge\MATLAB\MBeautifier-master存储到MATLAB的path中
  • 修改具体配置,配置文件为resources\settings\MBeautyConfigurationRules.xml,配置的修改可以查看README文件,我只修改了一处配置,确保所有的函数都会产生缩进,默认只对嵌套函数产生缩进
    1
    2
    3
    4
    <SpecialRule>
    <Key>Indentation_Strategy</Key>
    <Value>AllFunctions</Value>
    </SpecialRule>

可以直接使用命令进行格式化:

  • MBeautify.formatCurrentEditorPage():在MATLAB编辑器的当前活动页面上进行格式化。默认情况下文件不会被保存,会在编辑器中以修改状态保持打开。可以使用 MBeautify.formatCurrentEditorPage(true) 选择保存格式化后的文件。
  • MBeautify.formatEditorSelection():在MATLAB编辑器的当前活动页面上对选定文本进行格式化。保存机制同上,当前命令对于大文件可以更灵活地处理,但是通常建议使用前者。
  • MBeautify.formatFile(file, outFile):对文件进行格式化,并且将格式化后的文件尽可能保存到指定的输出文件。输出文件参数可以与输入文件参数相同。可以缺省第二个参数,此时输入文件被格式化后会在MATLAB编辑器中保持打开且未保存的状态。
  • MBeautify.formatFiles(directory, fileFilter):对目录中的多个文件进行格式化,文件将被就地格式化(覆盖)。第一个参数是目录的绝对路径,第二个是用于dir命令的通配符表达式,用于过滤目标目录中的文件。

可以为这些命令创建快捷方式:

  • MBeautify.createShortcut('editorpage'):创建快捷方式来调用MBeautify.formatCurrentEditorPage()
  • MBeautify.createShortcut('editorselection'):创建快捷方式来调用MBeautify.formatEditorSelection()
  • MBeautify.createShortcut('file'):创建快捷方式来调用MBeautify.formatFile(sourceFile, destFile)

可以使用命令来阻止对某些代码片段的格式化,示例如下

1
2
3
4
5
6
a =  1;
% MBeautifierDirective:Format:Off
longVariableName = 'where the assigement is';
aligned = 'with the next assignment';
% MBeautifierDirective:Format:On
someMatrix = [1 2 3];