How do I use vi keys in ipython under *nix?

前端 未结 6 1227
闹比i
闹比i 2020-12-04 07:48

Currently in Bash I use set -o vi to enable vi mode in my bash prompt.

How do I get this going in ipython?

Note: If an answer applies t

相关标签:
6条回答
  • 2020-12-04 08:00

    ipython uses the readline library and this is configurable using the ~/.inputrc file. You can add

    set editing-mode vi
    

    to that file to make all readline based applications use vi style keybindings instead of Emacs.

    0 讨论(0)
  • 2020-12-04 08:02

    You can also interactively switch between Vi-mode and Emacs mode. According to the the readline docs to switch between them you are supposed to be able to use the M-C-j key combination but that only seems to allow me to switch to vi-mode - on my Mac (where ESC is used as the 'Meta' key) it is: ESC+CTRL+j. To switch back to Emacs mode one can use C-e but that didn't appear to work for me - I had to instead do M-C-e - on my Mac it is: ESC+CTRL+e.

    FYI my ~/.inputrc is set up as follows:

    set meta-flag on
    set input-meta on
    set convert-meta off
    set output-meta on
    
    0 讨论(0)
  • 2020-12-04 08:05

    You may set vi in your .ipython start-up config file. Create one if you don't have it by adding a file to ~/.ipython/profile_default/startup/ called something like start.py. Here's an example:

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

    That last line is if you use ipython with Django, and want to import all your models by default.

    0 讨论(0)
  • 2020-12-04 08:08

    Looks like a solution works for many other readline compatible apps:

    Set the following in your ~/.inputrc file:

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

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

    0 讨论(0)
  • 2020-12-04 08:10

    In case someone's wandering in here recently, IPython 5.0 switched from readline to prompt_toolkit, so an updated answer to this question is to pass an option:

    $ ipython --TerminalInteractiveShell.editing_mode=vi
    

    ... or to set it globally in the profile configuration (~/.ipython/profile_default/ipython_config.py; create it with ipython profile create if you don't have it) with:

    c.TerminalInteractiveShell.editing_mode = 'vi'
    
    0 讨论(0)
  • 2020-12-04 08:16

    I needed to be able to switch modes interactively in IPython 5 and I found you can do so by recreating the prompt manager on the fly:

    a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()
    
    0 讨论(0)
提交回复
热议问题