由于我无法控制的原因,我使用了python 2.6.6和IPython 0.10.2。我通常也使用tcsh
shell,并且已经习惯使用<A-p>
从历史记录中完成命令(即按ALT
键和p
)。但是,这在IPython中并不起作用。我知道我可以按<C-r>
然后开始键入一个命令,但不可避免地发生的是我启动一个命令,按<A-p>
,得到冒号表示一些奇怪的状态,然后退出该状态,删除我的命令,按<C-r>
然后搜索我的命令。它变得相当恼人。有没有办法让<A-p>
依靠历史来完成我已经开始的命令?
答案 0 :(得分:1)
哎呀,这是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
是Meta(Alt,Opt),但这些线中至少有一条为我做了伎俩(现在tab
也允许完成)。另请参阅man readline
以获取可绑定到的内容的命令列表,并享受!希望你能在某些时候升级到Python 3和IPython 6。
[编辑]
请参阅Eric Carlsen在此答案下的第二条评论,了解其解决方法。