* nix에서 ipython에서 vi 키를 어떻게 사용합니까?


94

현재 Bash set -o vi에서는 bash 프롬프트에서 vi 모드를 활성화 하는 데 사용합니다.

ipython에서 어떻게해야합니까?

참고 : 답변이 모든 * nix에 적용되는 경우 제목에서 OS X를 제거하겠습니다. :)

답변:


165

누군가가 최근 여기에서 방황하는 경우 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'

4
:) 그것은 나를 구타에 대한 감사 - 나는이 대답을 게시 여기에 온
제이슨 Sundram

2
감사. 이것은 IPython, Jupyter 또는 prompt_toolkit에 대한 문서의 어느 곳에서나 찾기가 매우 어렵습니다.
nth

2
내 사용자 지정 키 바인딩 매핑을 어디에 추가합니까?
Aravinda

이 질문에 대한 내 대답 은 사용자 정의 키 바인딩을 추가하는 한 가지 방법을 보여줍니다.
jellycola

2
일반 모드인지 삽입 모드인지 추적 할 수있는 방법이 있습니까?
Peeyush Kushwaha

32

다른 많은 readline 호환 앱에서 솔루션이 작동하는 것 같습니다.

~/.inputrc파일에 다음을 설정 하십시오.

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

출처 : http://www.jukie.net/bart/blog/20040326082602


7
매우 조심 하십시오 set convert-meta on. 유니 코드 입력과 충돌하므로 유니 코드를 붙여 넣거나 입력하면 다양한 이벤트를 트리거 할 수 있습니다. 예를 들어 ü를 입력하면 흥미로운 결과가 표시됩니다.
minrk

4
마지막 두 줄이 무엇을하는지 아십니까? 빠른 확인을 통해 첫 번째 줄만 기본 vi 키 바인딩을 제공한다는 것을 알 수 있습니다. 다른 줄을 추가 할 이유가 있는지 알고 싶습니다.
weronika


@weronika 그래서, set convert-meta on(그리고 그 줄 아래의 모든 것은) 삽입 모드가 아닌 명령 모드에만 적용됩니다.
s4y

6
참고 : 이것은 더 이상 IPython 5.0.0에서 작동하지 않습니다. 아래 @imiric의 답변을 참조하십시오.
Jason Sundram

11

Vi- 모드와 Emacs 모드 사이를 대화식으로 전환 할 수도 있습니다. 그들 사이를 전환 하는 readline 문서 에 따르면 MCj 키 조합을 사용할 수 있어야하지만 내 Mac에서 vi-mode로 전환 할 수있는 것 같습니다 (ESC는 'Meta'키로 사용됩니다) ) 그것은 : ESC+ CTRL+ j. Emacs 모드로 다시 전환하려면 Ce를 사용할 수 있지만 저에게는 작동하지 않는 것 같습니다. 대신 Mac에서 MCe를 수행해야했습니다. ESC+ CTRL+ e입니다.

참고로 ~ / .inputrc는 다음과 같이 설정됩니다.

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

MCj가 왜 항상 작동하지 않는지 알아 내려고 노력하고 있습니다!
shangxiao

9

ipythonreadline 라이브러리를 사용하며 ~/.inputrc파일을 사용하여 구성 할 수 있습니다. 당신은 추가 할 수 있습니다

set editing-mode vi

모든 readline기반 애플리케이션이 Emacs 대신 vi 스타일 키 바인딩을 사용 하도록하려면 해당 파일에 추가합니다 .


9
ipython에서 readline호출 prompt_toolkit된 python 라이브러리 로 전환 5.0.0되었으므로 더 이상 작동하지 않습니다.
jellycola

감사합니다. 이것은 이전 버전의 IPython을 다루는 데 매우 유용했습니다.
timgeb

8

나는 IPython 5에서 대화식으로 모드를 전환 할 수 있어야했고 즉시 프롬프트 관리자를 다시 생성하여 그렇게 할 수 있다는 것을 알았습니다.

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()

0

.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을 사용하고 기본적으로 모든 모델을 가져 오려는 경우입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.