GitHubのトレンドリポジトリを眺めてたら面白そうなのを見つけました。
jonathanslenders/python-prompt-toolkit · GitHub
prompt_toolkit is a Library for building powerful interactive command lines in Python. It ships with a nice interactive Python shell (called ptpython) built on top of the library.
ptpythonというインタラクティブシェルを同梱したツールキットみたいです。readlineをめっちゃ強力にした感じだそうです。
試しに使ってみた感じ、操作性良好、見た目も綺麗、補完モリモリスマートなプロンプトですね。
以下、ほとんどREADME.mdの意訳といった感じです。
機能
純Python製
入力中もリアルタイムにシンタックスハイライトしてくれる
複数行の編集
高度な入力補完 (jediを使っているみたいなのでかなり賢い補完をしてくれます)
順、逆順のインクリメンタルサーチ
Python2.7, 3両対応
ユニコードのマルチバイト文字に対応 (Chinese inputと書いてありますので、日本語もOKだと思います)
選択からのコピペが可能 (もちろんVi、Emacs両方のスタイルで)
グローバルな状態なし
愛情たっぷりにコーディングしてあります♡
制限事項
VT100対応のターミナルでしか動作しません。とのことです。
今日のLinux, MacのターミナルではVT100に対応していますが、Windowsのものは対応してないんだぜ、とのこと。minttyでなら動作しそうですけど、どうなんでしょうね?
詳しいところは公式のドキュメントなりissueなりを参考にしたほうが良さそうです。
使い方
インストールは、例のごとく
$ pip install prompt-toolkit
で。
ptpython
コマンドで起動します。Viキーバインドを使いたい場合は--vi
オプションを付けましょう。
アプリケーション内にこのptpythonを組み込むことも出来るようです。
from prompt_toolkit.contrib.repl import embed embed(globals(), locals(), vi_mode=False, history_filename=None)
タブ補完も効きます。IPythonのめっちゃ使いにくいアレではなくて、ちゃんとIDEみたいな挙動をしてくれます。
Viモードの場合はCtrl-N
Ctrl-P
で動作します。
その他、複数行編集などのやり方なんかは公式を参照しませう。
マルチラインモード(複数行編集)
F7
を押すと、普通のエディタっぽい感じになって複数行の編集が可能になります。
Alt+Enter
で実行出来ます。また、その際に簡単なシンタックスチェックが走るので、ちょっとしたエラーであればSyntax Error (line=1 column=9)
のように場所を教えてくれます。マジかよ超便利じゃん! 普段はエディタに頼っているせいでREPLだと:
を忘れてイライラしまくる僕の能率は当社比3倍です。
なお、Macでは標準状態だとMeta-key(Altのこと)が有効化されていないので、標準ターミナルであればUse option as meta key
をチェック、iTerm2ならばLeft option acts as +Esc
をチェックする必要があります。
こっちの記事でオプションの意味についてちょびっとおはなししています。
http://qiita.com/hatchinee/items/12a4d42ee7a667f7934b#4-2
IPythonがお好き? 結構、もっと好きになりますよ
IPythonは操作感が好きではなかったので個人的にはあまり使ってきませんでした。しかし、すでにIPythonを運用してる人からすると「いや新しいREPLインターフェースとかいらんしょ」みたいな感じになりそうですが、どうやらIPython連携が可能なようです。
ptipython
で起動出来ます。!
%
とかそこらへんのマジックもそのまま使えるようです。
ライブラリとしての利用
ライブラリとして使って、ありとあらゆる部分をカスタマイズしてプロンプトとして利用可能だとのこと。ツールに組み込んだりとか、pecoと連携したりとか捗りそうですね?
ただ、未だ制作途中である都合上でAPIが変わりまくるぜということなので、現状では長く使うようなコードに利用するのは厳しそうですね。
READMEにはオウム返しプロンプトを作るサンプルが載っています。
Djangoプラギン
参考: Python Prompt Toolkitをdjangoで使う - brainstorm
django-extensions/django-extensions · GitHub
django-extensionsにすでに存在しているみたいですね。はかどりそうです。
所感
操作性の良さと見た目の良さが気持ちよいですね。Python3対応なのも嬉しいです。まぁ僕の職場が使っているPythonはクソ古いので、別途Python2.7か3を入れないとダメなんですけど。
jediの賢さは普段Vimを使っていてお世話になりっぱなしだし、Unicode対応も謳われているし、ハイパー便利の予感がしますね!
以上。
追記
標準REPLやIPython以外にも色々あるみたいなので、導入前に比較出来るようにリスト上げておきます
REPL強化系ライブラリ
readline(標準モジュール)
GNU readlineのラッパー
rlcompleter(標準モジュール)
readline向けの補完モジュール。こいつを使うと標準REPLでも補完が効いたりするようになる。エキPyの一章でも紹介してて存在を知った覚えがある。
サードパーティならrlcompleter2, 3も存在する。
インタラクティブシェル