2

Pythonでコーディングするためにpython-mode.elでEmacsを実行しています。コードの領域を自動的に適切にインデントする方法を学びたいと思っています。

次のコードはうまくインデントされていません。

while match != None:

        if match.group(1):
            titles.append(match.group(1))

        if match.group(2):
            if match.group(2) != '':
                pns.append(int(match.group(2)))
            else:
                pns.append('')
        else:
            pns.append('')

        if match.group(3):
            closings.append(len(''.join(match.group(3).split())))
        else:
            closings.append(0)

    match = pat.search(match.group(4))

リージョンを選択して を押すと、M-x indent-region完全に間違ったものになります:

while match != None:

    if match.group(1):
        titles.append(match.group(1))

        if match.group(2):
            if match.group(2) != '':
                pns.append(int(match.group(2)))
            else:
                pns.append('')
        else:
            pns.append('')

            if match.group(3):
                closings.append(len(''.join(match.group(3).split())))
            else:
                closings.append(0)

                match = pat.search(match.group(4))

理想は次のとおりです。

while match != None:

    if match.group(1):
        titles.append(match.group(1))

    if match.group(2):
        if match.group(2) != '':
            pns.append(int(match.group(2)))
        else:
            pns.append('')
    else:
        pns.append('')

    if match.group(3):
        closings.append(len(''.join(match.group(3).split())))
    else:
        closings.append(0)

    match = pat.search(match.group(4))
  1. M-x indent-regionがコード行間のインデント関係を誤って理解するのはなぜですか? 私のコードがあいまいであるからですか?
  2. じゃあどうすればいいの?

ありがとう。

4

2 に答える 2

1

前述のように、Python では大きなセクションを確実に自動インデントすることはできません。

ただし、行ごとに高速化する方法があります。これはここで使用されています:

(defun indent-and-forward ()
  "Indent current line and go forward one line. "
  (interactive "*")
  (if (empty-line-p)
      (fixup-whitespace)
      (indent-according-to-mode))
  (if (eobp)
      (newline-and-indent)
    (forward-line 1))
  (back-to-indentation))

ところで、Python だけでなく、他のモードでも動作するはずです。ここのキーは

(global-set-key [(super i)] 'indent-and-forward)

このキーを押すと、大きな部分が移動する可能性があります。それでも、希望どおりに動作することに注意してください。そうでない場合は、この行だけに TAB キーを使用して、次の行に進みます。

于 2014-09-13T18:46:25.260 に答える