Gibt es eine Möglichkeit, einen kompletten Python-Puffer in Emacs mit einem Tastendruck zu formatieren?

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

  •  18-09-2019
  •  | 
  •  

Frage

Ich bin für jede Art und Weise Emacs-Format eines Python-Puffer zu haben, indem Sie ein paar Tasten zu treffen. Mit dem Format, ich meine:

  1. Ersetzen Sie Registerkarten mit 4 Leerzeichen
  2. Wickeln Sie alle langen Linien korrekt bei 79 Zeichen. Dazu gehören Einwickeln & lange Strings verketten, Einwickeln lange Kommentare, Packlisten, Funktionsköpfe, etc.
  3. Nicht verwandte, aber wenn ich die Eingabetaste drücken, wäre es schön, wenn sich der Cursor automatisch Tabbed wurde.

Im Allgemeinen möchte ich einfach alles zu formatieren nach PEP 8.

Ich habe einen ziemlich Drucker / code beautifier / Code Formatter für Python sieht den Puffer durch, laufen, aber man ein Open-Source nicht finden kann.

Meine .emacs ist hier .

Für diejenigen, die antworten wollen „Sie haben nicht eine Formatierer für Python benötigen, ist es durch die Natur der Sprache schön ist,“ ich Ihnen sagen, dass dies nicht richtig ist. In realen Software-Systemen sollten Kommentare automatisch eingewickelt für Sie, Strings länger als 79 Zeichen sein werden, Tab Ebenen laufen 3+ tief. Bitte helfen Sie mir einfach direkt ohne eine philosophische Diskussion über die Vorzüge mein Problem zu lösen Quelle Python der Formatierung.

War es hilfreich?

Lösung

Um Registerkarten in Räume zu ändern und füllen Kommentare zur gleichen Zeit, können Sie diesen Befehl verwenden:

(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)))

Was Sie auf den Schlüssel Ihrer Wahl binden können, vermutlich etwa so:

(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)))

Beachten Sie die Einstellung des RET Schlüssel automatisch Einzug.

Wenn Sie auf alle Registerkarten mit Leerzeichen mit nur integrierten Befehlen wollen, ist dies eine mögliche Folge:

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

Um die Füllung Spalte und Tabulatorbreite zu bekommen zu sein, was Sie wollen, fügen Sie Ihre .emacs:

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

Argumentieren, sollte die Tabulatorbreite bis 8 eingestellt werden, je nachdem, wie andere Leute ihren Code in Ihrer Umgebung eingekerbt haben (8 ist ein Standard, dass einige andere Editoren haben). Wenn das der Fall ist, können Sie es einfach in der 'python-mode-hook auf 4 gesetzt. Es Art hängt von Ihrer Umgebung.

Andere Tipps

über Ihren Punkt 3:

  

Nicht verwandte, aber wenn ich die Eingabetaste drücken, würde es   schön, wenn sich der Cursor Tabbed wurde in   automatisch.

Mein Emacs Python-Modus tut dies standardmäßig offenbar. Es ist einfach python-Modus genannt ...

Mit Spacemacs 'Python Schicht mit Standardbindungen:

Die Sequenz , = wird yapfify-buffer laufen PEP8 Formatierung auf dem gesamten Puffer zu verhängen.

Sie können einstellen,

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

, damit die Automatisierung speichern Neuformatierung auf.

Der beste Weg, Tabulatoren in der Datei zu vermeiden, ist sie überhaupt nicht einzusetzen. Die folgende Erklärung wird die richtige Anzahl von Räumen immer einsetzen, anstatt Tabulator Einfügen

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

Ich sehe, Sie dies bereits in Ihrer .emacs-Datei

Die autopep8 und der Emacs-Wrapper für sie Ihren Wunsch erfüllen sollten .. https: // Github .com / Paetzke / py-autopep8.el

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top