6

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

私の質問は、プロファイル構成ファイルで vi-mode を設定した後、特定のキーバインディングをどのように指定するのですか? たとえば、エスケープに「jk」を使用するのが好きです。

4

2 に答える 2

10

あなたが正しい。prompt_toolkitを無視し.inputrcます。viIPython 5.0.0 プロファイル構成ファイルでモードのカスタム キーバインドを定義する方法はないようです。

これが私が現在使用している回避策です。きれいではありませんが、今のところ機能しています。

IPython docsによると、スタートアップ構成スクリプトでキーボード ショートカットを指定できます。

に再バインドjkする代わりに、ナビゲーション モードに切り替わるイベントのショートカット内にESCUnicode "j" ( u'j') の後に Unicode "k" ( ) を作成しています。u'k'VimInsertMode()prompt_toolkit

.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)

prompt_toolkit ソースは、必要に応じて他のショートカットを実装するのに役立ちます。

于 2016-08-07T04:12:15.620 に答える