有没有办法用按键格式化emacs中的完整python缓冲区?

时间:2009-08-17 15:02:06

标签: python emacs formatter

我正在寻找通过点击几个键让Emacs格式化Python缓冲区的任何方法。按格式,我的意思是:

  1. 用4个空格替换标签
  2. 以79个字符正确包裹所有长行。这包括包装和包装。连接长字符串,包装长注释,包装列表,函数头等。
  3. 不相关,但当我按下回车键时,如果光标自动被标记,那就太好了。
  4. 总的来说,我想根据PEP 8格式化所有内容。

    我找了一个漂亮的打印机/代码美化/代码格式化程序,用于Python运行缓冲区,但无法找到一个开源的。

    我的.emacs是here

    对于那些要回答“你不需要Python的格式化程序,因为语言本质而言很漂亮”的人,我告诉你这不正确。在真实的软件系统中,评论应该自动包装给你,字符串将超过79个字符,标签级别运行3+深。如果没有关于格式化Python源代码的优点的哲学讨论,请直接帮我解决我的问题。

5 个答案:

答案 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)

关于你的观点3:

  

不相关,但当我点击进入时,它就是   如果光标被选中,那就太好了   自动。

显然,我的emacs Python模式默认执行此操作。它简称为python-mode ...

答案 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