web-dev-qa-db-ja.com

ipythonで* nixの下でviキーを使用するにはどうすればよいですか?

現在Bashでは、set -o viを使用して、bashプロンプトでviモードを有効にします。

これをipythonでどのように行けばいいですか?

注:回答がすべての* nixに適用される場合、タイトルからOS Xを削除します:)

81
gak

誰かが最近ここをさまよう場合、 IPython 5.0はreadlineからPrompt_toolkitに切り替えました なので、この質問に対する更新された答えはオプションを渡すことです:

$ ipython --TerminalInteractiveShell.editing_mode=vi

...または、プロファイル構成でグローバルに設定する(~/.ipython/profile_default/ipython_config.py;持っていない場合はipython profile createで作成):

c.TerminalInteractiveShell.editing_mode = 'vi'
144
imiric

ソリューションは、他の多くのreadline互換アプリで動作するようです:

~/.inputrcファイルに次を設定します。

set editing-mode vi
set keymap vi
set convert-meta on

ソース: http://www.jukie.net/bart/blog/20040326082602

30
gak

ViモードとEmacsモードをインタラクティブに切り替えることもできます。 readline docs によると、それらを切り替えるには、MCjキーの組み合わせを使用できるはずですが、それはviモードに切り替えることしかできないようです-私のMac(ESCは「メタ」キーとして使用されます): ESC+CTRL+j。 Emacsモードに戻すには、C-eを使用できますが、それは私には動作しないように見えました-私の代わりにM-C-eをしなければなりませんでした-私のMacでは: ESC+CTRL+e

参考までに、私の〜/ .inputrcは次のように設定されています。

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
11
Pierz

ipythonはreadlineライブラリを使用し、これは~/.inputrcファイルを使用して構成可能です。あなたは付け加えられます

set editing-mode vi

そのファイルにreadlineベースのすべてのアプリケーションがEmacsの代わりにviスタイルのキーバインドを使用するようにします。

9
Noufal Ibrahim

IPython 5でインタラクティブにモードを切り替えられるようにする必要がありましたが、オンザフライでプロンプトマネージャーを再作成することで切り替えできることがわかりました。

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_Prompt_toolkit_cli()
7
Lex R

.ipythonの起動設定ファイルでviを設定できます。ファイルがない場合は、~/.ipython/profile_default/startup/のような名前のファイルをstart.pyに追加して作成します。以下に例を示します。

# Initializing script for ipython in ~/.ipython/profile_default/startup/
from IPython import get_ipython
ipython = get_ipython()

# If in ipython, set vi and load autoreload extension
if 'ipython' in globals():
    ipython.editing_mode = 'vi'
    ipython.magic('load_ext autoreload')
    ipython.magic('autoreload 2')
from Myapp.models import * 

最後の行は、Djangoでipythonを使用し、デフォルトですべてのモデルをインポートする場合です。

0
gregory