MATLAB 或 Octave 的自动缩进清理器? [关闭]

Posted

技术标签:

【中文标题】MATLAB 或 Octave 的自动缩进清理器? [关闭]【英文标题】:Automated indentation cleaner for MATLAB or Octave? [closed] 【发布时间】:2011-06-16 23:26:38 【问题描述】:

有人知道自动清理 MATLAB/Octave 脚本缩进的现有方法吗?我有其他人的代码(不,真的!),这太可怕了 - 没有一个循环或函数是缩进的,其他行的一半都缩进到明显随机的深度。

MATLAB 的问题在于它不使用大括号,因此 C++ 样式的缩进器不起作用。 Python 的可能会进行一些修改,如果我找不到预先存在的解决方案,我会尝试。

基本上,它只需要在以functionforifwhile... 开头的行之后缩进,我认为...

澄清: 正如 Jonas 所指出的,MATLAB 用户可以选择全部,ctrl+I 来修饰缩进。不幸的是,我无法访问 MATLAB 编辑器,而且能够一次自动缩进一批文件也很好。

【问题讨论】:

那么可能是一些帕斯卡压头? 您可以使用MATLAB Code Beautifier等在线服务 请看我对MBeautifier的回答 【参考方案1】:

这是一个 vim 插件,用于自动为 octave 代码缩进和语法高亮

https://github.com/tranvansang/octave.vim

【讨论】:

【参考方案2】:

我尝试了 emacs 的方式,但它不起作用,我是 ubuntu 和 octave 的新手。所以我采取了最简单的方法:D,为我缩进代码的在线网站,我可以复制/粘贴新的干净代码。

http://base-n.de/matlab/code_beautifier.html

【讨论】:

【参考方案3】:

啊,我应该知道 emacs 和 vi 会有答案。我真的应该学习其中之一。无论如何,我对我正在做的工作感到沮丧,并把它写成一个置换活动。删除+ '.test.m' 替换文件:

#!/usr/bin/env python

import re, sys

def startswith(line=""):
    # these need some word-boundary condition, but \b isn't working
    ctrlstart = '\s*(function|if|while|for|switch)'
    ctrlcont = '\s*(elseif|else|case|catch|otherwise)'
    ctrlend = '\s*(end|endfunction|endif|endwhile|endfor|endswitch)'
    match = re.match(ctrlstart, line)
    if ( match != None ) :
        return ['start',  match.group(0)]
    match=re.match(ctrlcont, line) 
    if ( match!=None ) :
        return ['cont',  match.group(0)]
    match=re.match(ctrlend, line)
    if ( match!=None ) :
        return ['end',  match.group(0)]
    else :
        return [False,  None]

def main( filelist = list() ) :
    for filename in filelist:
        nextindent = 0
        indentmult = 2
        file = open(filename, 'r')
        filelines = file.readlines()
        for ind in range(0, len(filelines)) :
            indentlevel = nextindent
            match = startswith(filelines[ind])
            if match[0] == 'start' :
                nextindent += 1
            elif match[0] == 'cont' :
                indentlevel -= 1
            elif match[0] == 'end' :
                indentlevel -= 1
                nextindent -= 1
            elif match[0] == False :
                nextindent = indentlevel
            filelines[ind] = ' '*indentlevel*indentmult + filelines[ind].lstrip().rstrip() +'\n'
        outfile = open(filename + '.test.m', 'w')
        outfile.writelines(filelines)
        file.close()
        outfile.close()

args = []
for arg in sys.argv[1:] :
    args += [str(arg)]
main(args)

【讨论】:

【参考方案4】:

CTRL+A(全选),然后是CTRL+I(自动缩进)将在 Matlab 编辑器中发挥作用。

【讨论】:

你会为那个投票,因为从技术上讲,它回答了这个问题。不幸的是,我实际上使用的是 octave,所以我没有 matlab 编辑器。 @naught101:感谢您的支持。需要this 之类的帮助吗? 具有八度模式的 Emacs 可以做到。 Emacs 或 Vim(如 Jonas 所说)+ 宏可以批量执行(您不必手动打开所有文件)。 还有一个 emacs matlab-mode 可以使用:)

以上是关于MATLAB 或 Octave 的自动缩进清理器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 MATLAB/Octave 中查找 N 维数组中的所有局部最小值

Octave 和MATLAB的区别?会用MATLAB的话,还用学Octave吗?

有人用过octave吗?能替代matlab吗

ILNumerics 等效于 MatLab/Octave 语句

如何从 GTK+2 C 代码中调用 matlab/octave 函数

在线版 Matlab Octave