IPython 用户魔术功能的自定义制表完成
IPython custom tab-completion for user magic function
在 IPython 中,为用户定义的对象提供制表符补全相当容易:只需定义一个 __dir__
方法,该方法 returns 对象的字符串列表。
IPython 还为我们提供了一种使用方便的 register_line_magic
实用程序来定义我们自己的自定义魔法函数的方法。在某些 ~/.ipython/profile_default/startup/magictest.py
:
from IPython.core.magic import register_line_magic
@register_line_magic
def show(dataType):
# do something depending on the given `dataType` value
现在我的问题是:如何为这个神奇的功能提供自动完成功能?
根据 this email, one should look into IPython.core.interactiveshell.InteractiveShell.init_completer()
的魔术函数完成示例,例如 %reset
、'%cd' 等...
但是,在定义我的魔法函数的同一个启动文件中,以下代码不起作用:
from IPython.core.interactiveshell import InteractiveShell
def show_complete():
return ['dbs', 'databases', 'collections']
InteractiveShell._instance.set_hook(
'complete_command', show_complete, str_key='%show')
在 IPython shell 中,键入 %show TAB
不会触发任何内容(函数中的打印语句显示函数甚至没有被调用)。
有人可以向我指出一些文档或示例,说明如何从 Ipython 启动文件中定义此类用户魔术命令参数完成吗?
谢谢!
你可以使用这个:
def load_ipython_extension(ipython):
def apt_completers(self, event):
""" This should return a list of strings with possible completions.
Note that all the included strings that don't start with event.symbol
are removed, in order to not confuse readline.
"""
return ['update', 'upgrade', 'install', 'remove']
ipython.set_hook('complete_command', apt_completers, re_key = '%%apt')
%%apt 是魔术关键字
在 IPython 中,为用户定义的对象提供制表符补全相当容易:只需定义一个 __dir__
方法,该方法 returns 对象的字符串列表。
IPython 还为我们提供了一种使用方便的 register_line_magic
实用程序来定义我们自己的自定义魔法函数的方法。在某些 ~/.ipython/profile_default/startup/magictest.py
:
from IPython.core.magic import register_line_magic
@register_line_magic
def show(dataType):
# do something depending on the given `dataType` value
现在我的问题是:如何为这个神奇的功能提供自动完成功能?
根据 this email, one should look into IPython.core.interactiveshell.InteractiveShell.init_completer()
的魔术函数完成示例,例如 %reset
、'%cd' 等...
但是,在定义我的魔法函数的同一个启动文件中,以下代码不起作用:
from IPython.core.interactiveshell import InteractiveShell
def show_complete():
return ['dbs', 'databases', 'collections']
InteractiveShell._instance.set_hook(
'complete_command', show_complete, str_key='%show')
在 IPython shell 中,键入 %show TAB
不会触发任何内容(函数中的打印语句显示函数甚至没有被调用)。
有人可以向我指出一些文档或示例,说明如何从 Ipython 启动文件中定义此类用户魔术命令参数完成吗?
谢谢!
你可以使用这个:
def load_ipython_extension(ipython):
def apt_completers(self, event):
""" This should return a list of strings with possible completions.
Note that all the included strings that don't start with event.symbol
are removed, in order to not confuse readline.
"""
return ['update', 'upgrade', 'install', 'remove']
ipython.set_hook('complete_command', apt_completers, re_key = '%%apt')
%%apt 是魔术关键字