Existe alguma maneira de formatar um buffer de python completa em emacs com uma tecla?

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu estou procurando alguma maneira de ter formato Emacs um Python tampão pressionando algumas teclas. Pelo formato, quero dizer:

  1. Substitua guias com 4 espaços
  2. Enrole todas as longas filas corretamente em 79 caracteres. Isto inclui embalagem & concatenação de cadeias longas, envolvendo longos comentários, listas de embrulho, cabeçalhos de função, etc.
  3. Não relacionado, mas quando eu bati entrar, seria bom se o cursor foi tabulado automaticamente.

Em geral, eu gostaria de formato de tudo apenas de acordo com PEP 8.

Eu olhei para um formatador pretty printer / code beautifier / código para Python para executar o tampão através, mas não consegue encontrar uma única fonte aberta.

As minhas .emacs é aqui .

Para aqueles que estão indo para responder "Você não precisa de um formatador para Python, é lindo pela natureza da língua," Eu digo que isso não é correto. Em sistemas de software reais, comentários devem ser auto-envolvidos para você, cordas vão ser mais do que 79 caracteres, os níveis de tabulação executar 3+ profundo. Por favor, apenas me ajudar a resolver o meu problema diretamente, sem alguma discussão filosófica sobre os méritos de formatação de fonte Python.

Foi útil?

Solução

Para alterar tabs em espaços e comentários de preenchimento, ao mesmo tempo, você pode usar este 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)))

O que você pode ligar para a chave de sua escolha, presumivelmente assim:

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

Observe a configuração da chave RET para travessão automaticamente.

Se você quiser todas as guias com espaços com apenas built-in comandos, esta é uma possível seqüência:

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

Para obter o preenchimento de coluna e largura guia para ser o que quiser, adicionar aos seus .emacs:

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

Provavelmente, a guia de largura deve ser ajustado para 8, dependendo de como outras pessoas têm recuado seu código em seu ambiente (8 sendo um padrão que alguns outros editores têm). Se for esse o caso, você pode apenas configurá-lo a 4 no 'python-mode-hook. É o tipo de depende do seu ambiente.

Outras dicas

Sobre o seu ponto 3:

independentes, mas quando eu bati entrar, seria seria bom se o cursor foi tabulada em automaticamente.

Modo Python Meu emacs faz isso por padrão, aparentemente. É simplesmente chamado python-mode ...

Usando Spacemacs ' camada Python com ligações padrão:

O , = sequência será executado yapfify-buffer impor PEP8 formatação em todo o tampão.

Você pode definir

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

para permitir automatizar reformatação em salvar.

A melhor maneira de evitar caracteres de tabulação em seu arquivo é não inseri-los em tudo. A seguinte declaração sempre inserir o número correto de espaços, em vez de inserir caracteres de tabulação

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

Eu vejo que você tem isso em suas .emacs já arquivo

O autopep8 e os emacs wrapper para ele deve cumprir o seu desejo .. https: // github .com / paetzke / py-autopep8.el

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top