Автоматизированное очиститель для вдаров для Matlab или октавы? [закрыто

StackOverflow https://stackoverflow.com/questions/4823998

Вопрос

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

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

По сути, это просто нужно было бы отступить после линий, начиная с function, for, if, while... и не навязчивые линии, начиная с end*, Я думаю...

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

Это было полезно?

Решение

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

Другие советы

Ах, я должен был знать, что у Эмаков и 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)

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

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

Вот плагин VIM для автоматического отступления и синтаксиса для кода октавы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top