Question

Quelqu'un sait-il d'une méthode existante de nettoyage automatique l'empreinte d'un script Matlab / Octave? J'ai quelqu'un d'autre code (non, vraiment!), Et il est horrible -. Aucun des boucles ou des fonctions sont en retrait, et la moitié des autres lignes sont en retrait à des profondeurs apparemment aléatoires

Le problème avec Matlab est qu'il n'utilise pas accolades, donc les pénétrateurs de style C ne vont pas au travail. les Python pourrait, avec un peu de modification, que je vais essayer si je ne peux pas trouver une solution pré-existante.

Fondamentalement, il avait juste besoin de retrait des lignes après lignes commençant par function, for, if, while ... et les lignes désindenter commençant par end*, je pense ...

Précision: Comme l'a souligné Jonas, les utilisateurs peuvent simplement sélectionner MATLAB® tous, et ctrl+I à nicify l'indentation. Malheureusement, je n'ai pas accès à l'éditeur de Matlab, et il serait également agréable d'être en mesure d'auto-indent un lot de fichiers à la fois.

Était-ce utile?

La solution

CTRL+A (pour tout sélectionner), suivi par CTRL+I (à tiret automatiquement) fera l'affaire dans l'éditeur Matlab.

Autres conseils

Ah, je connais emacs et vi auraient des réponses. Je devrais vraiment apprendre l'un d'entre eux. Quoi qu'il en soit, je suis frustré avec le travail que je faisais, et écrit cela comme une activité de déplacement. Retirez le + '.test.m' pour remplacer les fichiers:

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

J'ai essayé la voie emacs, mais il ne fonctionne pas, je suis nouveau à ubuntu et octave. Alors je pris la meilleure façon. D, site en ligne que le code tiret pour moi et je peux copier / coller le nouveau code propre

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

Voici un plugin vim pour automatiquement tiret et la syntaxe pour le code d'octave

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top