web-dev-qa-db-ja.com

python indent to 2 space in emacs 23?

Ubuntu10.04でemacs23.1.1を使用しています。 Python 2スペースインデントでプログラムしたい。emacsはpython(python.el?)のデフォルトモードを持っているように見える。

私は.emacsに以下を入れました:

    ;; Only spaces, no tabs
    (setq indent-tabs-mode nil)

    ;; Always end a file with a newline
    (setq require-final-newline nil)

    ;; Don't know which of these might work
    (setq-default tab-width 2)
    (setq-default python-indent 2)
    (setq-default py-indent-offset 2)

Pythonファイルを編集すると、4スペースのインデントが使用されます。C-hvpython-indentを試してみると、次のように表示されます。

    python-indent's value is 4
    Local in buffer webpage_cache.py; global value is 2

        This variable is safe as a file local variable if its value
        satisfies the predicate `integerp'.

    Documentation:
    Number of columns for a unit of indentation in Python mode.
    See also `M-x python-guess-indent'

    You can customize this variable.

つまり、2ではなく4です。Grr。変数をカスタマイズして保存してみましたが、まだ4です。customize-groupindentを試しましたが、まだ4です。

Emacsに注意を向けさせるにはどうすればよいですか?

20
dfrankow

.emacsファイルまたは.emacsによって参照されるファイルのいずれかに次を追加します。

(setq-default indent-tabs-mode nil)
(setq-default tab-width 2)

ローカライズしたい場合はフックを入れることができます

;; Python Hook
(add-hook 'python-mode-hook
          (function (lambda ()
                      (setq indent-tabs-mode nil
                            tab-width 2))))

編集:次の問題が私の設定を台無しにする可能性があることがわかりました:

  • ライブラリがロードされる前に変数を設定する
  • グローバル変数をリセットする他のパッケージ/構成

これらの問題の両方について、フックの作成と変数のローカライズが役立つことがわかりました。

17
dietbuddha

これを.emacsファイルに入れることができます:

(add-hook 'python-mode-hook '(lambda () 
 (setq python-indent 2)))

理由

    (setq-default python-indent 2)

.emacsがロードされたときにこの変数が終了しないため、動作しない可能性があります。 (しかし、私はemacsの初心者です。私の説明についてはよくわかりません。)

ただし、 PEP 8 ---スタイルガイドfor Python Code は、「インデントレベルごとに4つのスペース」を推奨しており、4つのスペースの方が読みやすいと思います。実際にこのコードを使用しています。 4スペースのインデントを強制します。

15
Vulpecula

私は自分でこの問題に遭遇しました。python-indentのヘルプには、他の誰も言及していない大きな手がかりが含まれていると思います。

See also `M-x python-guess-indent'

python-guess-indentnilに設定してカスタマイズしない場合、python.elは各Pythonバッファ(Python $ ===)に対してpython-indentを自動的に設定します。インデントされたテキストが含まれているため)、python-indentのカスタマイズが無効になります(一方、ローマにいる場合は...)

結局、これは私の.emacsファイルに入ったものです(他のすべてのカスタム変数を無視します):

(custom-set-variables
 '(python-guess-indent nil)
 '(python-indent 2))
15
bk1e