代码之家  ›  专栏  ›  技术社区  ›  Eric C.

在ipython中完成历史记录中的命令

  •  1
  • Eric C.  · 技术社区  · 8 年前

    出于我无法控制的原因,我一直在使用python 2.6.6和IPython 0.10.2。我通常也使用 tcsh shell,并且已经非常习惯于使用 <A-p> (即按下 ALT 键和 p ). 然而,这在IPython中不起作用。我知道我可以按 <C-r> 然后开始输入命令,但不可避免的是,我启动了一个命令,按 <A-p> ,得到一个冒号,表示某个奇怪的状态,然后退出该状态,删除我的命令,按 <C-r> 然后搜索我的命令。越来越令人恼火了。有什么办法吗 <A-p> 依靠历史完成我已经开始的命令?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Matt    8 年前

    哎哟,这是IPython、Python(和pip)的旧版本。坏消息是我没有太多的经验,这样一个老版本的IPython,好的是新的;当时要简单得多。

    大多数快捷方式和功能都是使用readline提供的,并且 python bindings of stdlib . 这意味着您最有可能尝试配置的是readline本身,而不仅仅是IPython;所以你可以在IPython之外找到更多信息!

    秘诀是 grep 在源代码中 parse_and_bind ,然后你会发现 the following example configuration ,引导我改变 ~/.ipython/ipy_user_conf.py 在第99行(都缩进了额外的4个空格)周围也是这样 main() 功能):

    import readline
    readline.parse_and_bind('set completion-query-items 1000')
    readline.parse_and_bind('set page-completions no')
    rlopts = """\
    tab: complete
    "\C-l": possible-completions
    set show-all-if-ambiguous on
    "\C-o": tab-insert
    "\M-i": "    "
    "\M-o": "\d\d\d\d"
    "\M-I": "\d\d\d\d"
    "\C-r": reverse-search-history
    "\C-s": forward-search-history
    "\C-p": history-search-backward
    "\C-n": history-search-forward
    "\e[A": history-search-backward
    "\e[B": history-search-forward
    "\C-k": kill-line
    "\C-u": unix-line-discard"""
    
    for cmd in rlopts.split('\n'):
        readline.parse_and_bind(cmd)
    

    命令的重复让我想到什么 \C , \M [e 平均值可能取决于系统。我敢打赌 \C 控制,以及 \M tab 允许完成)。另请参见 man readline 对于命令列表,您可以绑定到什么,并享受!希望您能在某个时候升级到Python 3和IPython 6。

    关于如何解决问题,请参阅埃里克·卡尔森(Eric Carlsen)在本答案下的第二条评论。