Автоматический очиститель отступа для MATLAB или Octave?

Кто-нибудь знает о существующем методе автоматической очистки отступа MATLAB/Octave script? У меня есть код другого (нет, действительно!), И это ужасно - ни одна из петель или функций не имеет отступов, а половина других строк имеет отступы до кажущейся случайной глубины.

Проблема с MATLAB заключается в том, что она не использует фигурные скобки, поэтому инденторы стиля С++ не будут работать. Python может, с небольшим изменением, попробовать, если не могу найти ранее существовавшее решение.

В принципе, для строк, начинающихся с function, for, if, while... и строк с отступами, начинающихся с end*, я думаю...

Уточнение: Как отметил Джонас, пользователи MATLAB могут просто выбрать все и ctrl+I, чтобы убрать отступ. К сожалению, у меня нет доступа к редактору MATLAB, и было бы неплохо иметь возможность автоматически отступать партию файлов одновременно.

Ответ 1

CTRL+A (для выбора всех), за которым следует CTRL+I (к автоматически отступу), сделает трюк в редакторе Matlab.

Ответ 2

А, я должен был знать 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)

Ответ 3

Я пробовал использовать emacs, но он не работает, я новичок в ubuntu и октаве. Поэтому я взял самый простой способ: D, онлайн-сайт, который отступы для кода для меня, и я могу скопировать/вставить новый чистый код.

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