キーを押すだけで emacs で完全な Python バッファをフォーマットする方法はありますか?

StackOverflow https://stackoverflow.com/questions/1288474

  •  18-09-2019
  •  | 
  •  

質問

いくつかのキーを押すだけで Emacs に Python バッファをフォーマットさせる方法を探しています。形式とは次のことを意味します。

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

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

バッファーを実行するための Python 用のきれいなプリンター/コード整形ツール/コード フォーマッタを探しましたが、オープンソースのものが見つかりません。

私の .emacs は ここ.

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

役に立ちましたか?

解決

スペースにタブを変更し、同時にコメントを記入するには、このコマンドを使用することができます:

(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に設定する必要があります。その場合は、あなただけ'python-mode-hookで4に設定することができます。それは一種のご使用の環境によって異なります。

他のヒント

についてあなたのポイント3:

  

関係のない、しかし、私はエンターキーを押したときに、それがしたいです   カーソルがでタブ付きれた場合はいいです   自動的ます。

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

と呼ばれています

Spacemacs 「デフォルトのバインディングとPythonの層でます:

シーケンス, =は、バッファ全体に書式設定PEP8を課すことyapfify-bufferを実行します。

あなたが設定することができます。

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

保存を再フォーマットする自動化可能にします。

あなたのファイルにタブ文字を回避する最善の方法は全くそれらを挿入しないことです。次の文は、常にではなくタブ文字を挿入するよりも、スペースの正確な数を挿入します。

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

私はすでにあなたの.emacsファイルでこれを持って見る

autopep8、それはあなたの欲求を満たす必要があるため、Emacsのラッパー.. ます。https:// githubの.COM / paetzke / PY-autopep8.elする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top