web-dev-qa-db-ja.com

Python Emacsのモードの比較

だから私はEmacs 24.3を持っており、それに伴ってかなり最近のpython.el編集用のPythonモードを提供するファイル。

しかし、私はpython-mode.el on Launchpad 、および2つのファイルを比較すると、前者は4000行未満であるのに対し、後者はほぼ20000であることがわかります。これは、後者がはるかに機能豊富であることを示唆しています。

そして、私はそれらについてのオンライン機能比較、ドキュメント、または少なくともそれらそれぞれの機能についてのリストを見つけることができません。はい、構文の強調表示と埋め込みインタープリターがありますが、シェルバッファーでの完了、ソースファイルバッファーでの完了、自動インデント、再インデントなどはどうですか。

これらのモードの重要な機能は何ですか? (または他のPythonモード)。詳細な回答を提供してください。

44
marczellm

私は一度python-mode.elユーザーでしたが、1年前にそれを使用するのをやめました。開発方法がうまく整理されていないと感じたためです。ここに私がその時に取ったメモのリストがあります。しかし、それから1年近く経過していることをお知らせしておきます。状況が変わる可能性があります。

  1. 多くのコピー&ペースト機能。
  2. 多くの誤って動作するコード。たとえば、変数を渡すのではなく、暗黙のバインディングを使用します。これにより、多くのコンパイルエラーが発生します(レキシカルスコープに変更すると機能しません)。
  3. コミットのおおよその粒度。パッチを送信しましたが、無関係な変更でコミットされました。

Python-mode.elについて私が気に入っている点の1つは、自動テストセットが付属していることです(ただし、これを実行したことがありません)。 python.elにはまだテストセットがありません。しかし、私はpython.elの作者がそれを書いていることを知っています。

Python.elはコンパクトですが、機能が低下するわけではありません。これは、コアを小さく保ち、簡潔なAPIを提供することで他の人がコアを拡張できるようにするのに似ています。 python.elの同じ作者が python-Django.el を記述して、Djangoプロジェクトのpython.elを拡張しました。Pythonと呼ばれる Jedi.el と呼ばれる高度なIPythonプラグイン [〜#〜] ein [〜#〜] と呼ばれます。どちらもpython.elのサポートが優れていますpython-mode.el(それは、私がpython-mode.elを使用していないからです)。

最初にpython-mode.elで見逃していたことがいくつかありましたが、それらはすぐにpython.elで修正されました(もちろん、これはおそらくpython-mode.elであまり機能を使用していなかったことを意味します)。

シェルバッファーでの補完、ソースファイルバッファーでの補完、自動インデント、再インデントなどはどうですか?.

  • シェルバッファでの補完:python.elとpython-mode.elの両方で機能します。ただし、Emacsのバージョンとpython(-mode).elのバージョンの組み合わせが悪い場合は、機能しないことがあります。したがって、おそらくpython.elはこの方法でより安全です。しかし、より良い解決策が必要な場合は、 [〜#〜] ein [〜#〜] を使用してください:)

  • ソースファイルバッファーでの完了: Jedi.el を使用するだけです:)

  • autoindent/reindent:パフォーマンスの点でどちらが優れているかわかりません。ただし、リターンのキーバインドは互いに異なります。 python-mode.elでは、RETと入力すると自動インデントが取得されます。 python.elでは、RETはインデントを与えないため、代わりにC-jを使用する必要があります。実際、改行とインデントのC-jは、Emacsの普遍的な動作です。したがって、他の言語でプログラミングを行う場合、python.elの方が優れています。

22
tkf

去年はpython-mode.elの開発に深く関わっていたので、私のコメントはおそらく偏っています。Emacsの初心者にはpython.elを使い続けることをお勧めします。また、その作者は、いくつかの有用なアプローチを評価するに値します。

python-mode.elは編集の生産性を高めるように設計されています。 python2とpython3またはIPythonシェルを介して並列に実行または実行することが簡単になります。

それは、調整されたコマンドを提供する必要なキーストロークの数を減らします。編集を高速化し、音声によるプログラミング、マクロ駆動の入力などを支援します。

現在サポートしているPython python.elからは知られていない言語機能:

py-up、py-down-ネストされたブロックの移動

入力時にフォームをフェッチするタイプミスは避けてください。たとえば、次のような句です。

py-backward-clause
py-copy-clause
py-down-clause

...

異なるバージョンをテストするときにカスタマイズする必要はありません:

py-execute-clause-python2
py-execute-clause-python3
py-execute-clause-ipython

...

  • より細かい部分の概念-py-expressionpy-minor-expression
  • バージョン付きおよび並列化された(I)Python実行可能ファイルを実行するコマンド。デフォルトのPythonを再定義する必要はありません。
  • 以前にマークされたアクティブ領域の必要性を大幅に削除します。py-execute-lineとさらにたくさん

概要を確認するには、メニューをご覧ください。ディレクトリ「doc」はコマンドをリストします。

コードの品質が上がるにつれて、両方のモードを比較する方法は、おそらく http://debbugs.gnu.org/ にリストされているバグをチェックすることです。たとえば、バグ#15510、#16875を参照してください。または http://lists.gnu.org/archive/html/help-gnu-emacs/2014-04/msg00250.html

「コミットの大まかな粒度」ですでにコメントされています:tkfは基本的に小さなピースを探すのに適切ですが、状況によってはルールを離れることがあります。かなりの部分は手書きではなく、ディレクトリ「devel」にあるプログラムによって作成されます。開発ブランチフリストで使用されるファイルを作成します-つまり、components-python-modeです。新しい機能を開始するとき、選択されたパスが実りあるものであるかどうかはしばしば明らかではありません。 100人ほどのコミット後、それでも不可能またはあまりお勧めできないことが判明する可能性があります。すべての蛇行を投稿する代わりに、これらのケースでその実験ブランチを数日間維持し、テストに合格したときにチェックインするために使用されていました。

ところで、tkfはコンパイルエラー(即座に検索される)ではなく、コンパイラの警告を指すと想定しています。残念ながら、Emacsはバックスタイルの設定に関する警告と実際のエラーを組み合わせています。

6
Andreas Röhler