Vi anahtarlarını ipython'da * nix altında nasıl kullanırım?


97

Şu anda Bash'de set -o vibash istemimde vi modunu etkinleştirmek için kullanıyorum .

Bunu ipython'da nasıl çalıştırırım?

Not: Tüm * nix'ler için bir yanıt geçerliyse, OS X'i başlıktan kaldıracağım :)

Yanıtlar:


171

Yakın zamanda burada birinin dolaşması durumunda, IPython 5.0 readline'dan istem_toolkit'e geçmiştir , bu nedenle bu sorunun güncellenmiş cevabı bir seçeneği geçmek olacaktır:

$ ipython --TerminalInteractiveShell.editing_mode=vi

... veya profil yapılandırmasında global olarak ayarlamak için ( ~/.ipython/profile_default/ipython_config.py; ipython profile createyoksa , ile oluşturun ):

c.TerminalInteractiveShell.editing_mode = 'vi'

4
Buraya bu cevabı göndermek için geldim - beni yendiğin için teşekkürler :)
Jason Sundram

2
Teşekkürler. Bunu IPython, Jupyter veya prompt_toolkit belgelerinde herhangi bir yerde bulmak sinir bozucu derecede zordur.
n'inci

2
Özel anahtar bağlama eşlemelerimi nereye eklerim?
Aravinda

Bu soruya verdiğim yanıt, özel anahtar bağlamaları eklemenin bir yolunu gösteriyor.
jellycola

2
Normal modda mı yoksa ekleme modunda mı olduğumu takip etmenin bir yolu var mı?
Peeyush Kushwaha

32

Görünüşe göre bir çözüm diğer birçok okuma satırı uyumlu uygulama için çalışıyor:

~/.inputrcDosyanızda aşağıdakileri ayarlayın :

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

Kaynak: http://www.jukie.net/bart/blog/20040326082602


7
Çok dikkatli olun set convert-meta on. Unicode girişiyle çakışır, bu nedenle unicode yapıştırır veya yazarsanız, şaşırtıcı olabilecek çeşitli olayları tetikleyebilirsiniz. Örneğin ü yazmayı deneyin, ilginç bir sonuç göreceksiniz.
minrk

4
Son iki satırın ne yaptığını biliyor musun? Hızlı bir kontrol, sadece ilk satırın temel vi tuş atamaları verdiğini gösterir - keşke diğerlerini eklemek için bir neden olup olmadığını bilseydim.
weronika


@weronika Yani, set convert-meta on(ve bu satırın altındaki her şey) ekleme modu için değil, yalnızca komut modu için geçerli olacaktır.
s4y

6
Not: Bu artık IPython 5.0.0'dan itibaren çalışmamaktadır. @ İmiric'in aşağıdaki cevabına bakın.
Jason Sundram

11

Ayrıca, Vi modu ve Emacs modu arasında etkileşimli olarak geçiş yapabilirsiniz. Bunlar arasında geçiş yapmak için readline belgelerine göre MCj tuş kombinasyonunu kullanabilmeniz gerekiyor, ancak bu yalnızca vi moduna geçmeme izin veriyor - Mac'imde (ESC, 'Meta' anahtarı olarak kullanılır) ) bu: ESC+ CTRL+ j. Emacs moduna geri dönmek için Ce kullanılabilir, ancak bu benim için işe yaramadı - bunun yerine MCe yapmak zorunda kaldım - Mac'imde: ESC+ CTRL+ e.

Bilginize ~ / .inputrc şu şekilde kurulur:

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

MCj'nin neden bunca zamandır çalışmadığını anlamaya çalışıyorum!
shangxiao

9

ipythonreadline kitaplığını kullanır ve bu, ~/.inputrcdosya kullanılarak yapılandırılabilir . Ekleyebilirsin

set editing-mode vi

tüm readlinetabanlı uygulamaların Emacs yerine vi tarzı tuş atamaları kullanmasını sağlamak için bu dosyaya ekleyin.


9
ipythondan anahtarlamalı readlineadlı bir piton kütüphanesine prompt_toolkitde 5.0.0bu artık çalışmıyor bu yüzden.
jellycola

Teşekkürler, bu IPython'un eski bir sürümüyle uğraşmak için çok faydalı oldu.
timgeb

8

IPython 5'te etkileşimli olarak modlar arasında geçiş yapabilmem gerekiyordu ve bunu komut istemi yöneticisini anında yeniden oluşturarak yapabileceğinizi öğrendim:

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

0

Vi'yi .ipython başlangıç ​​yapılandırma dosyanızda ayarlayabilirsiniz. Eğer sahip değilseniz, gibi bir ~/.ipython/profile_default/startup/şey için bir dosya ekleyerek bir tane oluşturun start.py. İşte bir örnek:

# 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 * 

Bu son satır, ipython'u Django ile kullanıyorsanız ve varsayılan olarak tüm modellerinizi içe aktarmak istiyorsanız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.