MATLAB 或 Octave 的自动缩进清理器? [关闭]
Posted
技术标签:
【中文标题】MATLAB 或 Octave 的自动缩进清理器? [关闭]【英文标题】:Automated indentation cleaner for MATLAB or Octave? [closed] 【发布时间】:2011-06-16 23:26:38 【问题描述】:有人知道自动清理 MATLAB/Octave 脚本缩进的现有方法吗?我有其他人的代码(不,真的!),这太可怕了 - 没有一个循环或函数是缩进的,其他行的一半都缩进到明显随机的深度。
MATLAB 的问题在于它不使用大括号,因此 C++ 样式的缩进器不起作用。 Python 的可能会进行一些修改,如果我找不到预先存在的解决方案,我会尝试。
基本上,它只需要在以function
、for
、if
、while
... 开头的行之后缩进,我认为...
澄清: 正如 Jonas 所指出的,MATLAB 用户可以选择全部,ctrl+I
来修饰缩进。不幸的是,我无法访问 MATLAB 编辑器,而且能够一次自动缩进一批文件也很好。
【问题讨论】:
那么可能是一些帕斯卡压头? 您可以使用MATLAB Code Beautifier等在线服务 请看我对MBeautifier的回答 【参考方案1】:这是一个 vim 插件,用于自动为 octave 代码缩进和语法高亮
https://github.com/tranvansang/octave.vim
【讨论】:
【参考方案2】:我尝试了 emacs 的方式,但它不起作用,我是 ubuntu 和 octave 的新手。所以我采取了最简单的方法:D,为我缩进代码的在线网站,我可以复制/粘贴新的干净代码。
http://base-n.de/matlab/code_beautifier.html
【讨论】:
【参考方案3】:啊,我应该知道 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)
【讨论】:
【参考方案4】:CTRL+A
(全选),然后是CTRL+I
(自动缩进)将在 Matlab 编辑器中发挥作用。
【讨论】:
你会为那个投票,因为从技术上讲,它回答了这个问题。不幸的是,我实际上使用的是 octave,所以我没有 matlab 编辑器。 @naught101:感谢您的支持。需要this 之类的帮助吗? 具有八度模式的 Emacs 可以做到。 Emacs 或 Vim(如 Jonas 所说)+ 宏可以批量执行(您不必手动打开所有文件)。 还有一个 emacs matlab-mode 可以使用:)以上是关于MATLAB 或 Octave 的自动缩进清理器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 MATLAB/Octave 中查找 N 维数组中的所有局部最小值
Octave 和MATLAB的区别?会用MATLAB的话,还用学Octave吗?
ILNumerics 等效于 MatLab/Octave 语句