Автоматизированное очиститель для вдаров для Matlab или октавы? [закрыто
-
26-10-2019 - |
Вопрос
Кто -нибудь знает о существующем методе автоматической очистки сценария 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, онлайн -сайт, который отступает код для меня, и я могу скопировать/вставить новый чистый код.
Вот плагин VIM для автоматического отступления и синтаксиса для кода октавы