3

いくつかのキーを押すことで Emacs が Python バッファをフォーマットする方法を探しています。フォーマットとは、次のことを意味します。

  1. タブを 4 つのスペースに置き換えます
  2. すべての長い行を 79 文字で正しく折り返します。これには、長い文字列の折り返しと連結、長いコメントの折り返し、リストの折り返し、関数ヘッダーなどが含まれます。
  3. 関係ありませんが、エンターを押すと、カーソルが自動的にタブインされるといいですね。

一般に、すべてを PEP 8 に従ってフォーマットしたいと思います。

Pythonがバッファーを実行するためのプリティプリンター /コードビューティファイア /コードフォーマッタを探しましたが、オープンソースのものを見つけることができません。

私の .emacs はここにあります。

「Python にはフォーマッターは必要ありません。言語の性質上、Python は美しいものです」と答える人のために、これは正しくないと言います。実際のソフトウェア システムでは、コメントは自動的にラップされる必要があり、文字列は 79 文字を超え、タブ レベルは 3 つ以上の深さになります。Pythonソースをフォーマットするメリットについて哲学的な議論をせずに、私の問題を直接解決するのを手伝ってください。

4

5 に答える 5

4

タブをスペースに変更し、同時にコメントを入力するには、次のコマンドを使用できます。

(defun my-format-python-text ()
  "untabify and wrap python comments"
  (interactive)
  (untabify (point-min) (point-max))
  (goto-char (point-min))
  (while (re-search-forward comment-start nil t)
    (call-interactively 'fill-paragraph)
    (forward-line 1)))

おそらく次のように、選択したキーにバインドできます。

(eval-after-load "python"
  '(progn
     (define-key python-mode-map (kbd "RET") 'newline-and-indent)
     (define-key python-mode-map (kbd "<f4>") 'my-format-python-text)))

RET自動的にインデントするキーの設定に注意してください。

コマンドが組み込まれているスペースのあるすべてのタブが必要な場合は、次のシーケンスが可能です。

C-x h           ;; mark-whole-buffer
M-x untabify    ;; tabs->spaces

塗りつぶしの列とタブの幅を希望どおりにするには、.emacsに次のように追加します。

(setq fill-column 79)
(setq-default tab-width 4)

おそらく、他の人があなたの環境でコードをインデントした方法に応じて、タブ幅を8に設定する必要があります(8は他の一部のエディターのデフォルトです)。その場合は、で4に設定できます'python-mode-hook。それはあなたの環境に依存します。

于 2009-08-17T15:15:59.677 に答える
1

ポイント3について:

関係ありませんが、エンターを押すと、カーソルが自動的にタブインされるといいですね。

私のemacs Pythonモードは、明らかにデフォルトでこれを行います。それは単にpython-modeと呼ばれています...

于 2009-08-17T16:36:43.867 に答える
1

デフォルトのバインディングでSpacemacs の Python レイヤーを使用する:

シーケンス, =が実行yapfify-bufferされ、バッファ全体に PEP8 フォーマットが適用されます。

設定できます

(setq-default dotspacemacs-configuration-layers '(
  (python :variables python-enable-yapf-format-on-save t)))

保存時の再フォーマットの自動化を有効にします。

于 2018-03-07T16:17:57.667 に答える
0

ファイルでタブ文字を避ける最善の方法は、タブ文字をまったく挿入しないことです。次のステートメントは、タブ文字を挿入するのではなく、常に正しい数のスペースを挿入します

;; Turn off tab insertion in favor of space insertion
(setq-default indent-tabs-mode nil)

これはすでに .emacs ファイルに含まれているようです

于 2009-08-18T22:34:02.407 に答える