2009-08-17 29 views
3

我正在寻找任何通过点击几个键来使Emacs格式化为Python缓冲区的方式。通过格式,我的意思是:有没有什么办法通过按键在emacs中格式化完整的python缓冲区?

  1. 与4位
  2. 包装所有排长正确地79个字符替换标签。这包括包装&拼接的长字符串,包皮过长的意见,包装清单,函数头部等
  3. 无关的,但是当我按下回车键,这将会是不错的,如果光标在自动标签。

总的来说,我想根据PEP 8

我找了一个漂亮的打印/代码美化/格式化代码为Python运行通过缓冲只是格式化的一切,但可以”找到一个开源的。

我的.emacs是here

对于那些谁是要回答“你并不需要一个用于Python的格式,它是由语言的自然美丽,”我给你说,这是不正确的。在真正的软件系统中,评论应该为你自动打包,字符串长度超过79个字符,标签级别超过3+。请直接帮我解决我的问题,而不需要对格式化Python源码的优点进行哲学讨论。

+1

换成79个字符?这太愚蠢了。它不再是1985年了;没有人在80x25屏幕上编程。 – 2009-08-17 18:19:18

+4

@Glenn,PEP 8指定了79,所以是79。在任何地方都可以看到它,如果我确实需要通过shell进行远程登录以改变生产环境,那么79是很好的。 – 2009-08-17 19:27:25

+1

我不盲目地遵循braindamaged PEPs。 2009年针对80列终端的代码目标明显荒谬,使代码变得丑陋难懂。 – 2009-08-17 23:20:14

回答

4

要更改tab变成空格,同时填写评论,你可以使用这个命令:

(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。这种情况取决于你的环境。

+0

此外,M-q将包装长评论。 (我相信lisp命令是“填充区域”。) – AFoglia 2009-08-17 15:45:13

+0

'M-q'实际上是'fill-paragraph',这是我在while循环中使用的。 – 2009-08-17 16:55:00

1

关于你的第3点:

无关的,但是当我按下回车键,如果光标在 自动分页它会 是很好的。

我的emacs Python模式显然是默认的。它简单地称为python-mode ...

+0

我的答案的第一个版本有同样的观点,但后来我发现它是我自己的副本(与Emacs一起发行的版本)。 – 2009-08-17 16:57:37

0

,以避免在您的文件制表符,最好的办法是不要将它们。下面的语句总是插入空格正确的号码,而不是插入的制表符

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

我看你有没有这在你的.emacs文件已经

0

使用Spacemacs' Python layer默认绑定:

序列, =将运行yapfify-buffer征收PEP8格式上整个缓冲区。

您可以设置

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

启用自动格式化保存。

相关问题