Est-il possible de formater un tampon python complet dans emacs avec une pression de touche?

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

  •  18-09-2019
  •  | 
  •  

Question

Je cherche une façon d'avoir le format Emacs un tampon Python en appuyant sur quelques touches. Par format, je veux dire:

  1. Remplacer les onglets avec 4 places
  2. Justifier les longues lignes correctement à 79 caractères. Cela comprend l'emballage et concaténer les chaînes longues, emballage longs commentaires, listes d'emballage, les en-têtes de fonction, etc.
  3. non apparentés, mais quand je frappe entre, ce serait bien si le curseur est automatiquement tabulé.

En général, j'aimerais 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 ne peut pas trouver une open source un.

Mon .emacs est .

Pour ceux qui vont répondre « Vous ne ont pas besoin pour Python formatter, il 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 pour vous emballé automatiquement, les chaînes vont être plus de 79 caractères, les niveaux de tabulation fonctionnent en profondeur 3+. S'il vous plaît aidez-moi à résoudre mon problème directement, sans une discussion philosophique sur le bien-fondé de mise en forme source Python.

Était-ce utile?

La solution

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 paramètre de la touche RET au tiret automatiquement.

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 doit être réglée à 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 tel est le cas, vous pouvez simplement le mettre à 4 dans le 'python-mode-hook. Cela dépend de la nature de votre environnement.

Autres conseils

A propos de votre point 3:

  

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

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

Utilisation Spacemacs «couche python avec liaisons par défaut:

La séquence , = exécutera yapfify-buffer d'imposer pep8 mise sur l'ensemble du tampon.

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.

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à

Le autopep8 et l'emballage emacs pour elle devrait répondre à votre désir .. https: // github .com / Paetzke / py-autopep8.el

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top