C'è un modo per formattare un buffer completo pitone in emacs premendo un tasto?
Domanda
Sto cercando un modo per avere formato di un buffer di Emacs Python colpendo un paio di chiavi. Per formato, voglio dire:
- Sostituire le schede con 4 posti
- 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.
- 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.
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