2

間違ったインデント モードを何らかの形で「記憶」した Python ソース ファイルが 1 つあります。「emacs foo.py」を実行してからすぐに「ch v indent-tabs-mode」を実行すると、「その値は t です」と表示されます。他のすべての Python ソース ファイルは、indent-tabs-mode nil で表示されます。

ファイルにリテラル タブはありません。新しいテキストを挿入すると、インデントはタブを使用して行われます。過去のある時点で、タブを含むファイルのバージョンを保存 (およびバージョン管理にチェックイン) しました。

私は python-mode.el、バージョン 5.1.0、および GNU Emacs 23.3.1 を使用しています。ファイルは Python モードで開きます。

ここで何が起こっているのですか?emacs は、この 1 つのファイルだけに indent-tabs-mode を設定するように指示する状態をどこに保存し、そもそもどのように設定したのでしょうか?

4

2 に答える 2

3

ソース ツリーで.dir-locals.elファイルを確認します。これらは、デフォルトの python-mode 設定を上書きしている可能性があります。

ディレクトリ変数のドキュメントを参照してください。

于 2013-05-14T11:31:38.420 に答える
0

わかりました、私はこれを理解したと思います。.dir-locals.el ファイルはありませんでしたが、動作を再現できました。皮切りに:

if foo:
        print "this line is indented with 8 spaces"

それをfoo.pyに保存します。もう一度 foo.py を開き、印刷行の最後に移動し、Return キーを押して別の行を作成し、自動インデントします。その行はタブでインデントされます! 最初に行を8つのスペースでインデントした方法はわかりませんが(インデントには4つのスペースを使用しています)、それが原因のようです。

8 スペースのインデントを 4 スペースに手動で修正し、ファイルを保存すると問題が解決しました。

tabnanny または pylint がこれを見つけたと思います。

于 2013-05-15T12:39:58.207 に答える