2009-08-17 8 views
3

Je cherche un moyen pour Emacs de formater un tampon Python en appuyant sur quelques touches. Par format, je veux dire:Existe-t-il un moyen de formater un tampon python complet dans emacs en appuyant sur une touche?

  1. Remplacer les onglets avec 4 places
  2. Justifier les longues lignes correctement à 79 caractères. Non compris, mais lorsque j'appuie sur Entrée, ce serait bien si le curseur était automatiquement inséré dans les onglets.

En général, je voudrais simplement formater tout selon PEP 8.

J'ai cherché une jolie imprimante/code beautifier/code Python pour formatter pour exécuter le tampon à travers, mais peut » t trouver un open source. Mes .emacs est here. Pour ceux qui vont répondre "Vous n'avez pas besoin d'un formateur pour Python, c'est beau par la nature de la langue", je vous dis que ce n'est pas correct. Dans les systèmes logiciels réels, les commentaires doivent être automatiquement emballés pour vous, les chaînes de caractères doivent comporter plus de 79 caractères, les niveaux de tabulation doivent être plus de 3+. S'il vous plaît aidez-moi à résoudre mon problème directement sans discussion philosophique sur les mérites de la mise en forme de la source Python.

+1

Retour au début à 79 caractères? C'est juste idiot. Ce n'est plus 1985; personne ne programme sur un écran 80x25. –

+4

@Glenn, PEP 8 spécifie 79, donc 79 c'est. C'est agréable de pouvoir l'afficher n'importe où, et si j'ai besoin de me connecter à distance via un shell pour changer quelque chose en production, 79 est parfait. –

+1

Je ne suis pas aveuglément les PEP braindamaged. Le code de ciblage pour les terminaux à 80 colonnes en 2009 est complètement absurde et rend le code laid et illisible. –

Répondre

4

Pour changer d'onglet dans les espaces et remplir des commentaires en même temps, vous pouvez utiliser cette commande:

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

Que vous pouvez lier à la clé de votre choix, sans doute comme ceci:

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

Notez le réglage de la clé RET pour le retrait automatique.

Si vous voulez tous les onglets avec des espaces avec des commandes simplement intégrées, ceci est une séquence possible:

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

Pour obtenir la colonne de remplissage et de la largeur de tabulation pour être ce que vous voulez, ajouter à votre. emacs:

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

On peut dire que, l'onglet largeur doivent être fixés à 8, selon la façon dont d'autres personnes ont indenté leur code dans votre environnement (8 étant un défaut que certains autres éditeurs ont). Si c'est le cas, vous pouvez simplement le mettre à 4 dans le 'python-mode-hook. Cela dépend de votre environnement.

+0

En outre, M-q enveloppera de longs commentaires. (Je crois que la commande lisp est "fill-region".) – AFoglia

+0

'M-q' est en fait' 'fill-paragraph', qui est ce que j'ai utilisé dans la boucle 'while'. –

1

À propos de votre point 3:

non apparentés, mais quand je frappe entrer, ce serait bien si le curseur est automatiquement en onglets.

Mon mode emacs Python le fait par défaut, apparemment. Il est simplement appelé python-mode ...

+0

La première révision de ma réponse avait le même point, mais j'ai remarqué que c'était ma propre copie (par opposition à celle qui est fournie avec Emacs). –

0

La meilleure façon d'éviter les caractères de tabulation dans votre fichier est de ne pas les insérer du tout.La déclaration suivante sera toujours insérer le nombre correct d'espaces, plutôt que d'insérer des caractères de tabulation

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

Je vois que vous avez dans votre fichier .emacs déjà

0

en utilisant Spacemacs' Python layer avec des liaisons par défaut:

La séquence , = se déroulera yapfify-buffer d'imposer pep8 formatage sur le tampon entier.

Vous pouvez définir

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

pour permettre l'automatisation de reformatage sur Enregistrer.

Questions connexes