Frage

Kennt jemand eine vorhandene Methode zur automatischen Reinigung der Einklebung eines Matlab-/Oktav -Skripts? Ich habe den Code eines anderen (nein, wirklich!) Und es ist schrecklich - keine der Schleifen oder Funktionen wird eingerückt, und die Hälfte der anderen Zeilen ist in scheinbar zufällige Tiefen eingerückt.

Das Problem mit MATLAB ist, dass es keine Klammern verwendet, sodass Einsiehrungen im C ++ -Stil nicht funktionieren. Python könnte mit ein wenig Modifikation versuchen, die ich versuchen werde, wenn ich keine bereits bestehende Lösung finden kann.

Grundsätzlich müsste es nur Zeilen nach Linien einstellen, beginnend mit function, for, if, while... und uneingeschränkte Linien beginnend mit end*, Ich finde...

Klärung: Wie von Jonas hervorgehoben, können MATLAB -Benutzer einfach alle auswählen und ctrl+I um die Eindrücke zu enthält. Leider habe ich keinen Zugriff auf den MATLAB-Editor, und es wäre auch schön, in der Lage zu sein, eine Reihe von Dateien gleichzeitig automatisch zu veranlassen.

War es hilfreich?

Lösung

CTRL+A (um alle auszuwählen), gefolgt von CTRL+I (Um automatisch einzusetzen) wird den Trick im MATLAB -Editor ausführen.

Andere Tipps

Ah, ich hätte EMACs wissen sollen, und VI hätte Antworten. Ich sollte wirklich einen von ihnen lernen. Wie auch immer, ich war frustriert über die Arbeit, die ich gemacht habe, und schrieb dies als Verdrängungsaktivität. Entferne das + '.test.m' zum Ersetzen von Dateien:

#!/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)

Ich habe den Emacs -Weg ausprobiert, aber es funktioniert nicht, ich bin neu in Ubuntu und Oktave. Also habe ich den einfachsten Weg eingenommen: D, Online -Site, die den Code für mich einnimmt, und ich kann den neuen sauberen Code kopieren/einfügen.

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

Hier ist ein VIM -Plugin, das automatisch eingerichtet und Syntax -Highlight für den Oktavcode eingerichtet hat

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top