Domanda

Sto cercando un modo per avere formato di un buffer di Emacs Python colpendo un paio di chiavi. Per formato, voglio dire:

  1. Sostituire le schede con 4 posti
  2. Avvolgere tutte le linee lunghe correttamente a 79 caratteri. Questo include il confezionamento e la concatenazione di stringhe lunghe, avvolgendo lunghi commenti, le liste di confezionamento, intestazioni di funzione, ecc.
  3. non collegati, ma quando il colpo entra, sarebbe bello se il cursore è stato schede dentro automaticamente.

In generale mi piacerebbe formattare solo tutto secondo PEP 8.

Ho cercato un formattatore abbastanza stampante / code Beautifier / codice per Python per eseguire il tampone attraverso, ma non riesco a trovare un open source uno.

Il mio .emacs è qui .

Per coloro che stanno andando a rispondere "Non hai bisogno di un formattatore per Python, è bellissimo dalla natura del linguaggio," Io vi dico che questo non è corretto. Nei sistemi software reali, i commenti dovrebbero essere auto-avvolto per voi, le stringhe stanno per essere più lungo di 79 caratteri, i livelli di tabulazione corrono 3+ profonda. Per favore, aiutarmi a risolvere il mio problema direttamente, senza un po 'di discussione filosofica sui meriti di formattazione sorgente Python.

È stato utile?

Soluzione

Per modificare le schede in spazi e riempire i commenti allo stesso tempo, è possibile utilizzare questo comando:

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

Il che è possibile associare al tasto di vostra scelta, presumibilmente in questo modo:

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

Si noti l'impostazione della chiave RET automaticamente trattino.

Se si voleva tutte le schede con gli spazi con i comandi appena costruito-in, questa è una possibile sequenza:

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

Per ottenere la colonna di riempimento e la larghezza scheda di essere ciò che si desidera, aggiungere ai .emacs:

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

Si può sostenere che la scheda-larghezza deve essere impostato su 8, a seconda di come altre persone hanno rientrato il loro codice nel proprio ambiente (8 essendo un default che alcuni altri editori hanno). Se questo è il caso, si può solo impostare a 4 nel 'python-mode-hook. E 'sorta di dipende dall'ambiente.

Altri suggerimenti

Informazioni sul punto 3:

  

non collegati, ma quando il colpo entra, sarebbe   bello se il cursore è stato a schede in   automaticamente.

Il mio emacs modalità Python fa questo per impostazione predefinita, a quanto pare. Si chiama semplicemente python-mode ...

Spacemacs 'strato Python con le associazioni di default:

Il , = sequenza verrà eseguito yapfify-buffer imporre PEP8 formattazione su l'intero buffer.

È possibile impostare

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

per consentire l'automazione di riformattazione su Salva.

Il modo migliore per evitare i caratteri di tabulazione nel file è quello di non inserire affatto. La seguente dichiarazione sarà sempre inserire il numero corretto di spazi, piuttosto che l'inserimento di caratteri di tabulazione

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

Vedo che avete nel vostro file .emacs già

L'autopep8 e emacs wrapper per esso dovrebbe soddisfare il vostro desiderio .. https: // GitHub .com / Paetzke / py-autopep8.el

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top