Emacs的Python模式比较

mar*_*llm 44 python emacs

所以我有Emacs 24.3,它带来了一个非常新的python.el文件,提供了一个Python模式进行编辑.

但我一直在读书,有一个python-mode.el快速启动,并比较其跳出,我认为前者是下4000线,而后者则是这两个文件差不多20000这表明后者更丰富的功能.

我找不到关于它们的任何在线功能比较,文档或至少有关每个功能的列表.是的,有语法高亮和嵌入式解释器,但是在shell缓冲区中完成,在源文件缓冲区中完成,autoindent,reindent等等.

那么这些模式的重要特征是什么?(或者你推荐的任何其他用于Emacs的Python模式.)请提供详细的答案.

tkf*_*tkf 22

我曾经是python-mode.el用户,但一年前就退出了,因为我觉得它的开发方式并不是很好.这是我当时的笔记列表.但我需要警告你,从那时起已经过去了将近一年,所以情况可能会改变.

  1. 许多复制和粘贴功能.
  2. 许多意外工作的代码.例如,不使用隐式绑定传递变量.这会产生许多编译错误(如果将其更改为词法范围,则无效).
  3. 粗略的提交粒度.我发送了一个补丁,它被提交了无关的更改.

我喜欢python-mode.el的一件事是它带有自动测试装置(虽然我从来没有运行它).python.el还没有测试集.但我知道python.el的作者现在正在编写它.

虽然python.el是紧凑的,但并不意味着你的功能很差.它更像是保持核心小,让其他人通过提供简洁的API来扩展它.python.el的同一作者编写了python-django.el来扩展django项目的python.el.我为Python编写了一个名为Jedi.el的自动完成插件和一个名为EIN的高级IPython插件.他们都比python-mode.el更好地支持python.el(好吧,那是因为我不使用python-mode.el).

我首先从python-mode.el中遗漏了一些东西,但是很快就修复了python.el(当然,这可能意味着我没有在python-mode.el中使用这么多功能).

如何在shell缓冲区中完成,在源文件缓冲区中完成,autoindent,reindent等.

  • 在shell缓冲区中完成:它在python.el和python-mode.el中都有效.但有时如果你的Emacs版本和python(-mode).el版本组合不好,它就不起作用.所以python.el可能以这种方式更安全.但如果你想要更好的解决方案,请使用EIN :)

  • 在源文件缓冲区中完成:只需使用Jedi.el :)

  • autoindent/reindent:我不知道哪一个在性能方面更好.但是,返回的keybind彼此不同.在python-mode.el中,如果输入RET,则会获得autoindent.在python.el中,RET不会给你缩进,你应该使用Cj代替.实际上,换行符和缩进的Cj是Emacs中的普遍行为.所以如果你用其他语言编程,python.el会更好.

  • 我不会提交错误报告错误报告,因为我没有使用python-mode.el.退出使用python-mode.el的原因,包括"粗略的提交粒度,写在我的答案中.不,提交的粒度对我来说毫无意义.这只是开发人员如何关心他们的代码库,恕我直言. (3认同)
  • 在指向动态绑定时声称"意外工作代码"同样是错误的.动态绑定与Emacs的成功故事密切相关,即使现在没有多少防御者. (2认同)
  • 好吧,如果它不是"意外工作代码"那么它编写的代码不是很好.python-mode.el使用动态绑定与非前缀变量,至少在我使用python-mode.el时.如果你想要动态绑定,我认为你应该用`defvar`声明它并输入正确的前缀. (2认同)
  • tkf:动态绑定几十年来一直是Emacs的方式(并且一如既往地继续提供巨大的好处).词法绑定已经在Emacs的发布版本中使用了不到一年.批评一个可追溯到1992年的图书馆,因为它没有考虑到词法绑定的设计是愚蠢的(因为人们可能会选择为一些任意库启用词法绑定并假设一切都会继续工作). (2认同)

And*_*ler 6

去年大量参与开发python-mode.el,我的评论可能有偏见:建议继续使用python.el为Emacs初学者.其作者也值得赞扬一些有用的方法.

python-mode.el旨在提高编辑效率.它使得通过python2和python3或IPython shell并行运行或执行变得容易.

它减少了提供定制命令所需的击键次数.它使编辑更快,通过语音,宏驱动输入等帮助编程.

支持目前python.el中未知的Python语言功能:

py-up,py-down - 移动嵌套块

避免使用拼写错误提取表单,例如:

py-backward-clause
py-copy-clause
py-down-clause
Run Code Online (Sandbox Code Playgroud)

...

测试不同版本时无需自定义:

py-execute-clause-python2
py-execute-clause-python3
py-execute-clause-ipython
Run Code Online (Sandbox Code Playgroud)

...

  • 细粒度部分的概念 - py-expression,py-minor-expression
  • 运行版本化和并行的命令(I)Python可执行文件,无需重新定义默认的Python
  • 在很大程度上消除了之前标记的活动区域的需要,看到py-execute-line了更多的活动区域

要获得概述,请查看菜单.目录"doc"列出命令.

随着代码质量的提高:比较两种模式的方法可能是检查http://debbugs.gnu.org/中列出的错误.例如,参见bug#15510,#16875; 或http://lists.gnu.org/archive/html/help-gnu-emacs/2014-04/msg00250.html

已经在"粗略的提交粒度"评论:虽然tkf基本上正在寻找较小的部分,但有时条件会让我离开规则.相当多的部分不是手工编写的,而是由位于"devel"目录中的程序编写的.他们创建在开发分支frist中使用的文件 - 即components-python-mode.当开始一个新功能时,选择的路径是否富有成效往往并不明显.在一百个即将提交之后,它仍然可能变得不可能或不那么值得推荐.而不是发布所有曲折,用于在这些情况下将实验分支保留数天,并在测试通过时检入.

BTW假设tkf不是指编译错误 - 它会立即查找 - 而是编译器警告.不幸的是,Emacs混合了关于支持的样式首选项的警告和真实错误.