Debian/UbuntuのPythonシェル(pythonコマンド)でTab補完を用いる
- IDLE
- IPython
といったものの中でTabキーを押すと、コマンド行シェルのように入力途中の文字列について候補が1つだけの部分が補完され、複数ある部分は再びTabキーを押すことで候補一覧を表示することができる。
Python(python(-[バージョン])コマンド)自体を端末から起動したときにも、以前Mandrivaを用いていたときには同様にTabキーで補完,候補一覧表示を行うことができるようになっていたのだが、Ubuntu(10.10時点)のPythonではTab文字がそのまま出るだけとなっていた。
端末から起動するPythonシェルの中でTab補完を用いるための処理と補完の操作
端末から起動するPythonシェルの中でTab補完を用いるためには
- rlcompleter
- readline
の2つのモジュールをimport処理してTabキーを用いるための処理を呼び出すとTab補完ができるようになる。ただ、readlineのモジュールはGNU/Linuxでは基本的に存在するが、他の環境では使えないことがあるかもしれない。
>>> import rlcompleter >>> import readline >>> readline.parse_and_bind ('tab: complete')
これで
>>> re[Tabを2回押す]
入力途中でTabキーを押すと
>>> re readline reduce( reload( repr( return reversed( >>> re
と候補一覧が出て、候補が1つのところでTabキーを押すと
>>> read[Tabを押す]
が
>>> readline
のようになる。候補が多いと
>>> readline.[Tabを押す]
下のようにページ分けされて表示される(数が非常に多い場合は表示前に確認が出る)、SPACEでページ送りができる。
readline.__class__( readline.__delattr__( readline.__dict__ readline.__doc__ readline.__file__ (中略) readline.add_history( readline.clear_history( readline.get_begidx( --More--
この例では2ページで終わりとなった。
readline.get_completer( readline.get_completer_delims( readline.get_completion_type( readline.get_current_history_length( readline.get_endidx( (中略) readline.set_pre_input_hook( readline.set_startup_hook( readline.write_history_file( >>> readline.
自動的にTab補完が有効になるようにする
Pythonシェルを起動したときに先ほどの3つの処理を自動的に実行するようにできれば自動的にTab補完が使えるようになる。
環境変数PYTHONSTARTUPの利用
環境変数PYTHONSTARTUPの場所にあるスクリプトはPythonシェルの起動時に自動実行されるため
とすることでTab補完を自動的に有効にできる。
[任意]ファイル名: ~/bin/python-tabcomp.py
import rlcompleter import readline readline.parse_and_bind ('tab: complete')
コマンド行シェルから起動する際には下のようなエイリアスの登録が便利。スクリプトの配置場所は実際の場所に合わせる。
bash,zsh向け:
[一部]ファイル名: ~/.bashrc, ${ZDOTDIR}/.zshrc
alias python='PYTHONSTARTUP=~/bin/python-tabcomp.py python'
tcsh向け:
[一部]ファイル名: ~/.tcshrc
alias python "env PYTHONSTARTUP=${HOME}/bin/python-tabcomp.py python"
複数のバージョンのPythonがある場合はコマンド名の部分をバージョンごとの名前(「python2.6」や「python3.1」など)に置き換える。