2011-01-28 23 views
11

MATLAB/Octaveスクリプトのインデントを自動的に消去する既存の方法を知っている人はいますか?私は他の誰かのコードを持っています(実際はありません)、それは恐ろしいものです - ループや関数のどれもインデントされておらず、他の行の半分は明らかにランダムな深さにインデントされています。MATLABまたはOctave用の自動インデントクリーナー?

MATLABの問題は、中カッコを使用しないため、C++スタイルのインデントが機能しないことです。 Pythonのものは少し修正されているかもしれませんが、既存の解決策が見つからない場合は試してみます。

基本的にはそれだけで

明確化...私が思うに、whileifforfunctionで始まる行の後に行をインデントする必要があります...とend*で始まる未行をインデントしたい:としてジョナスが指摘したように、MATLABユーザーはすべてを選択することができ、インデントを正確にするにはctrl+Iを選択できます。残念ながら、私はMATLABエディタにアクセスすることはできません。一度に一括してファイルを自動インデントすることもできればうれしいでしょう。

+0

多分いくつかのパスカル圧子? – stefan

+0

[MATLAB Code Beautifier](http://base-n.de/matlab/code_beautifier.html)のようなオンラインサービスを使用することができます – Valeriy

+0

[MBeautifier(https://stackoverflow.com/questions/)に関する私の答えを見てください。 23360822/how-can-i-reformat-code-in-matlab-editor/37362250#37362250) – DVarga

答えて

15

CTRL+A(すべてを選択)、CTRL+I(自動的にインデントする)は、Matlabエディタでトリックを行います。

+2

これは、技術的に原因があるので、その答えに投票します。残念ながら、私は実際にオクターブを使用しているので、私はmatlabエディタを持っていません。 – naught101

+2

@ naught101:upvoteに感謝します。 [this](http://www.mathworks.com/matlabcentral/fileexchange/21798-editing-matlab-files-in-vim)のようなものが役に立ちますか? – Jonas

+3

オクターブモードのEmacsはそれを行うことができます。 EmacsやVim(Jonasが言ったように)+マクロはバッチで実行できます(手動ですべてのファイルを開く必要はありません)。 –

5

ああ、私はemacsを知っていて、viが答えを持っていたはずです。私は本当にそれらの1つを学ぶべきです。とにかく、私がやっていた仕事に不満を持ち、これを置き換え活動として書きました。ファイルを置き換えるために+ '.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) 
1

私はEmacsの方法を試してみましたが、それは動作しません、私はUbuntuとオクターブに新しいです。だから私は最も簡単な方法を取った:D、私のためのコードをインデントし、私は新しいクリーンなコードをコピー/貼り付けることができるオンラインサイト。

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

関連する問題