我正在寻找通过点击几个键让Emacs格式化Python缓冲区的任何方法。按格式,我的意思是:
总的来说,我想根据PEP 8格式化所有内容。
我找了一个漂亮的打印机/代码美化/代码格式化程序,用于Python运行缓冲区,但无法找到一个开源的。
我的.emacs是here。
对于那些要回答“你不需要Python的格式化程序,因为语言本质而言很漂亮”的人,我告诉你这不正确。在真实的软件系统中,评论应该自动包装给你,字符串将超过79个字符,标签级别运行3+深。如果没有关于格式化Python源代码的优点的哲学讨论,请直接帮我解决我的问题。
答案 0 :(得分:4)
要将标签更改为空格并同时填写注释,您可以使用以下命令:
(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)))
你可以绑定到你选择的键,大概是这样的:
(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)))
请注意RET
键的设置以自动缩进。
如果您希望所有带有空格的选项卡都只有内置命令,这可能是一个序列:
C-x h ;; mark-whole-buffer
M-x untabify ;; tabs->spaces
要使填充列和标签宽度符合您的要求,请添加到.emacs:
(setq fill-column 79)
(setq-default tab-width 4)
可以说,标签宽度应设置为8,具体取决于其他人在您的环境中缩进代码的方式(其中8是其他编辑器的默认值)。如果是这种情况,您可以在'python-mode-hook
中将其设置为4。这取决于你的环境。
答案 1 :(得分:1)
答案 2 :(得分:1)
将Spacemacs' Python layer与默认绑定结合使用:
序列, =
将运行yapfify-buffer
以在整个缓冲区上施加PEP8格式。
您可以设置
(setq-default dotspacemacs-configuration-layers '(
(python :variables python-enable-yapf-format-on-save t)))
启用自动重新格式化保存。
答案 3 :(得分:0)
避免文件中制表符的最佳方法是根本不插入它们。以下语句将始终插入正确数量的空格,而不是插入制表符
;; Turn off tab insertion in favor of space insertion
(setq-default indent-tabs-mode nil)
我看到你的.emacs文件已经有了这个
答案 4 :(得分:0)
autopep8和它的emacs包装应该满足你的愿望.. https://github.com/paetzke/py-autopep8.el