Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB或Octave的自动压痕清理器?_Matlab_Coding Style_Indentation_Octave_Auto Indent - Fatal编程技术网

MATLAB或Octave的自动压痕清理器?

MATLAB或Octave的自动压痕清理器?,matlab,coding-style,indentation,octave,auto-indent,Matlab,Coding Style,Indentation,Octave,Auto Indent,有人知道现有的自动清除MATLAB/Octave脚本缩进的方法吗?我有其他人的代码(没有,真的!),这很可怕——没有一个循环或函数缩进,其他行的一半缩进到明显的随机深度 问题是MATLAB不使用支撑,所以C++样式的压头不能工作。Python可能会做一些修改,如果找不到预先存在的解决方案,我会尝试一下 基本上,它只需要在以函数,为,如果,而开始的行之后缩进行。。。并且取消缩进以结尾*开头的行,我认为 澄清:正如Jonas所指出的,MATLAB用户可以选择all,然后ctrl+I对缩进进行加密。不

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

问题是MATLAB不使用支撑,所以C++样式的压头不能工作。Python可能会做一些修改,如果找不到预先存在的解决方案,我会尝试一下

基本上,它只需要在以
函数
如果
开始的行之后缩进行。。。并且取消缩进以
结尾*
开头的行,我认为


澄清:正如Jonas所指出的,MATLAB用户可以选择all,然后
ctrl+I
对缩进进行加密。不幸的是,我没有访问MATLAB编辑器的权限,如果能够一次自动缩进一批文件也会很好

CTRL+A
(选择全部),然后是
CTRL+I
(自动缩进)将在Matlab编辑器中执行此操作

啊,我应该知道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)

我尝试了emacs的方法,但没有用,我对ubuntu和octave还不熟悉。所以我采取了最简单的方法:D,在线站点,为我缩进代码,我可以复制/粘贴新的干净代码


这里有一个vim插件,可以自动缩进并突出显示八度代码的语法


也许是帕斯卡压头?你可以使用在线服务,比如a,请看我关于你获得该产品投票权的回答,因为从技术上讲,它回答了这个问题。不幸的是,我实际上使用的是倍频程,所以我没有matlab编辑器。@NOTT101:谢谢你的投票。需要帮助吗?带倍频程模式的Emacs可以。Emacs或Vim(正如Jonas所说)+宏可以批量执行(您不必手动打开所有文件)