2016-07-18 2 views
4

Ipython 5.0.0은 새로운 입력 라이브러리 (prompt_toolkit)를 사용하기 때문에 더 이상 .inputrc (* nix)에 지정된 편집기 모드로 기본 설정되지 않는다는 것을 알고 있습니다. 이 옵션은 Ipython 프로파일 구성 파일 (https://stackoverflow.com/a/38329940/2915339 참조)에서 설정해야합니다.Ipython 5.0.0에서 특정 vim 바인딩을 설정하는 방법

제 질문은 : 프로필 설정 파일에 vi-mode를 설정했는데 어떻게 특정 키 바인딩을 지정합니까? 예를 들어 탈출을 위해 'jk'를 사용하고 싶습니다.

답변

5

네가 맞아. prompt_toolkit.inputrc을 무시합니다. IPython 5.0.0 프로파일 설정 파일에서 vi 모드에 대한 커스텀 키 바인딩을 정의하는 방법이없는 것 같습니다.

해결 방법 현재 사용 중입니다. 꽤 아니지만 지금은 효과가 있습니다.

IPython docs에 따르면 시작 구성 스크립트에서 키보드 바로 가기를 지정할 수 있습니다. 대신 ESC에 다시 바인딩 jk

는 I 탐색 모드로 전환하는 prompt_toolkit 이벤트 VimInsertMode() 단축 내부 유니 "K"(u'k') 다음 유니 코드 "J"(u'j')를 만들고있다.

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 필요에 따라 다른 단축키를 구현하는 데 도움이됩니다

은 내가 다음 코드로 .ipython/profile_default/startup/keybindings.py를 만들었습니다.

관련 문제