2009-08-17 8 views
3

私はEmacsがいくつかのキーを押すことでPythonバッファをフォーマットする方法を模索しています。フォーマットによって、私は意味:emacsで完全なpythonバッファをキープレスでフォーマットする方法はありますか?

  1. は79文字で正確に4つのスペース
  2. ラップ全ての長い行とタブを交換してください。これには、&の長い文字列を連結し、長いコメントをラップし、リスト、関数ヘッダーなどをラッピングすることが含まれます。
  3. 私はenterキーを押したときにカーソルが自動的にタブインされたといいです。私は「を介してバッファを実行するためにはPythonのためにかなりのプリンタ/コードビューティ/コードフォーマッタを探したが、できてきただけPEP 8

    に応じてすべてのものをフォーマットしたいのですが、一般的に

オープンソースのものを見つける。

私の.emacsはhereです。

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

+1

79文字で折り返しますか?それはちょうど愚かです。もはや1985年ではない。誰も80x25の画面でプログラミングしていません。 –

+4

@グレン、PEP 8は79を指定しているので79です。どこでも見ることができてうれしいです。プロダクションで何かを変更するためにシェル経由でリモートログインする必要がある場合は、79が完璧です。 –

+1

braindamaged PEPには気にしません。 2009年に80桁の端末を対象としたコードを作成することは明らかに馬鹿げており、コードは醜く判読不能になっています。 –

答えて

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に設定する必要があります。その場合は、'python-mode-hookの4に設定してください。それはあなたの環境に依存します。あなたのポイント3について

+0

また、M-qは長いコメントを書きます。 (私はlispコマンドが "fill-region"だと信じています) – AFoglia

+0

'M-q'は' 'fill-paragraph'です。これは' while'ループで使ったものです。 –

1

無関係、私はエンターキーを押したときにカーソルが自動的に でタブ付きされた場合、それは素晴らしいこと と思います。

私のemacsのPythonモードでは、これがデフォルトでは明らかです。 python-mode ...

+0

私の答えの最初のリビジョンは同じ点でしたが、私はそれが自分のコピーであることに気づきました(Emacsに同梱されているものとは対照的です)。 –

0

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

0

autopep8とEmacsのラッパー、それはあなたを満たす必要があるため、あなたの.emacsファイルでこれを持って見

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

欲求..デフォルトのバインディングとSpacemacs' Python layerを使用してhttps://github.com/paetzke/py-autopep8.el

0

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

あなたは

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

が自動保存を再フォーマットできるようにすることができます。

関連する問題