3

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

  1. 用 4 个空格替换制表符
  2. 以 79 个字符正确换行所有长行。这包括包装和连接长字符串、包装长注释、包装列表、函数头等。
  3. 不相关,但是当我按回车键时,如果光标自动进入选项卡会很好。

一般来说,我只想根据 PEP 8 格式化所有内容。

我已经为 Python 寻找一个漂亮的打印机/代码美化器/代码格式化程序来运行缓冲区,但找不到开源的。

我的 .emacs 在这里

对于那些要回答“您不需要 Python 的格式化程序,因为语言的本质它很漂亮”的人,我对您说这是不正确的。在真实的软件系统中,注释应该为您自动换行,字符串将超过 79 个字符,标签级别运行 3+ 深度。请直接帮助我解决我的问题,而无需对格式化 Python 源代码的优点进行一些哲学讨论。

4

5 回答 5

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)

可以说,tab-width 应该设置为 8,这取决于其他人如何在您的环境中缩进他们的代码(8 是其他一些编辑器的默认值)。如果是这种情况,您可以将其设置为 4 中的'python-mode-hook. 这有点取决于你的环境。

于 2009-08-17T15:15:59.677 回答
1

关于你的第 3 点:

不相关,但是当我按回车键时,如果光标自动进入选项卡会很好。

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

于 2009-08-17T16:36:43.867 回答
1

使用带有默认绑定的 Spacemacs 的 Python 层:

该序列, =将运行yapfify-buffer以对整个缓冲区强加 PEP8 格式。

你可以设置

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

启用保存时自动重新格式化。

于 2018-03-07T16:17:57.667 回答
0

避免文件中出现制表符的最佳方法是根本不插入它们。以下语句将始终插入正确数量的空格,而不是插入制表符

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

我看到你的 .emacs 文件中已经有了这个

于 2009-08-18T22:34:02.407 回答
0

autopep8 和它的 emacs 包装器应该可以满足您的需求.. https://github.com/paetzke/py-autopep8.el

于 2017-08-20T14:47:48.840 回答