2016-07-18 13 views
4

Ipython 5.0.0では新しい入力ライブラリ(prompt_toolkit)が使用されるため、.inputrc(* nix)で指定されたエディタモードはデフォルトではなくなりました。このオプションは、Ipythonプロファイル設定ファイル(https://stackoverflow.com/a/38329940/2915339を参照)に設定する必要があります。Ipython 5.0.0で特定のvim-bindingsを設定する方法

私の質問は、プロフィール設定ファイルにviモードを設定していて、特定のキーバインディングをどのように指定するのですか?私は、例えば、エスケープのために 'jk'を使うのが好きです。

答えて

5

あなたはそうです。 prompt_toolkitは、.inputrcを無視します。 IPython 5.0.0プロファイル設定ファイルのviモードのカスタムキーバインドを定義する方法はありません。

ここでの回避方法私は現在使用しています。それはかなりではありませんが、今のところうまくいきます。

IPython docsによれば、スタートアップコンフィギュレーションスクリプトでキーボードショートカットを指定できます。 ESC

代わりの再バインドjk、私はナビゲーションモードに切り替わりprompt_toolkitイベントのショートカットVimInsertMode()の内部Unicodeの「K」(u'k')に続いて、ユニコード「J」(u'j')を作ってるんです。

私は、次のコードで.ipython/profile_default/startup/keybindings.py作成:

from IPython import get_ipython 
from prompt_toolkit.enums import DEFAULT_BUFFER 
from prompt_toolkit.filters import HasFocus, ViInsertMode 
from prompt_toolkit.key_binding.vi_state import InputMode 


ip = get_ipython() 

def switch_to_navigation_mode(event): 
    vi_state = event.cli.vi_state 
    vi_state.reset(InputMode.NAVIGATION) 

if getattr(ip, 'pt_cli'): 
    registry = ip.pt_cli.application.key_bindings_registry 
    registry.add_binding(u'j',u'k', 
         filter=(HasFocus(DEFAULT_BUFFER) 
           & ViInsertMode()))(switch_to_navigation_mode) 

The prompt_toolkit sourceは、必要に応じて、あなたが他のショートカットを実装するのに役立ちます。

関連する問題