2012-05-01 25 views

回答

89

萬一有人在徘徊在這裏最近,IPython 5.0 switched from readline to prompt_toolkit,所以更新的這個問題的答案是通過一個選項:

$ ipython --TerminalInteractiveShell.editing_mode=vi 

...或全局設置配置文件中的配置(~/.ipython/profile_default/ipython_config.py;與ipython profile create創建它,如果你沒有的話)與:

c.TerminalInteractiveShell.editing_mode = 'vi' 
+2

我來這裏發佈這個答案 - 謝謝你打我:) –

+1

謝謝。在IPython,Jupyter或prompt_toolkit文檔中的任何地方都難以找到這個問題。 – jth

+1

我在哪裏添加我的自定義鍵綁定映射? – Aravinda

30

看起來像一個解決方案適用於許多其他的readline兼容的應用程序:

套裝在~/.inputrc文件中的以下內容:

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

來源:http://www.jukie.net/bart/blog/20040326082602

+5

爲*非常*小心在'設置轉換的元'。它與unicode條目衝突,所以如果你粘貼或鍵入unicode,你可以觸發各種事件,這可能會令人驚訝。例如,嘗試輸入ü,你會看到一個有趣的結果。 – minrk

+3

你知道最後兩行是做什麼的嗎?快速檢查表明,只有第一行提供了基本的vi鍵綁定 - 我希望我知道是否有理由添加其他鍵。 – weronika

+1

@weronika它看起來像[''set keymap vi'改變哪些鍵映射(即模式)下面的命令會影響](http://stackoverflow.com/a/10002721/84745)和['設置convert-meta on'改變某些鍵的行爲方式](http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html)。我不確定你是否需要它們。 – s4y

8

ipython使用readline庫,可使用~/.inputrc文件進行配置。您可以添加

set editing-mode vi 

到該文件,使所有readline基於應用程序使用VI風格的按鍵組合,而不是Emacs的。

+7

'ipython'從'readline'切換到'5.0.0'中名爲'prompt_toolkit'的python庫,所以這不再起作用。 – jellycola

10

您還可以交互式切換Vi模式和Emacs模式。根據readline docs在它們之間切換,你應該能夠使用MCj組合鍵,但似乎只允許我切換到vi模式 - 在我的Mac上(其中ESC被用作'Meta'鍵)它是:ESC + CTRL + j。要切換回Emacs模式,可以使用C-e,但這似乎不適用於我 - 我必須改爲使用M-C-e - 在我的Mac上,它是:ESC + CTRL + e

FYI我的〜/ .inputrc文件設置如下:

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

我一直在試圖弄清楚爲什麼M-C-j不能全部工作! – shangxiao

2

我需要能夠切換模式交互的IPython的5,我發現,你可以通過重新創建提示經理對飛這樣做:

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli() 
相關問題