跳转到主要内容

Python提示的彩色TAB补全

项目描述

fancycompleter: 彩色Python TAB补全

这是什么?

fancycompleter是一个模块,通过添加TAB补全功能来提高Python交互式提示符的使用体验。它是stdlib的rlcompleter模块的扩展。

它的最佳特性是补全项会以不同的颜色显示,具体取决于它们的类型

image

在上面的图像中,字符串以绿色显示,函数以蓝色显示,整数和布尔值以黄色显示,None以灰色显示,类型和类以品红色显示。其他所有内容都是纯白色。

fancycompleter与Python 3兼容。然而,默认情况下,Python 3中颜色可能不起作用,请参阅如何获取颜色?部分以获取详细信息。

其他特性

  • 为了节省屏幕空间,fancycompleter 只显示 "点号" 之后的字符。相比之下,在上述示例中,rlcompleter 显示了由 "sys." 预先添加的所有内容。
  • 如果我们在行的开头按下 <TAB>,将插入一个真正的制表符字符,而不是尝试完成。这在输入函数体或提示符中的多行语句时很有用。
  • rlcompleter 不同,fancycompleter 确实 可以完成包含字典或列表索引的表达式。例如,mydict['foo'].<TAB> 可以正常工作(假设 mydict 是一个字典,并且它包含键 'foo',当然 :-))。
  • 从 Python 2.6 开始,如果完成的名字是一个可调用的,rlcompleter 会自动添加一个开括号 (。如果我们不打算真正调用它,这会让人感到厌烦,所以 fancycompleter 禁用了这种行为。

安装

首先,使用 pipeasy_install 安装模块。

$ pip install fancycompleter

然后,在 Python 交互式提示符中

>>> import fancycompleter
>>> fancycompleter.interact(persist_history=True)
>>>

如果您希望在启动时自动启用 fancycompleter,可以将这两行添加到您的 PYTHONSTARTUP 脚本的末尾。

如果您没有 PYTHONSTARTUP 脚本,以下命令将在 ~/python_startup.py 中为您创建一个

$ python -m fancycompleter install

在 Windows 上,install 自动设置 PYTHONSTARTUP 环境变量。在其他系统上,您需要在 ~/.bashrc 或等效文件中添加适当的命令。

注意:根据您的特定系统,interact 可能需要采取一些非常规手段才能显示颜色,尽管一切应该“正常工作”。特别是,interact 的调用应该是启动文件中的最后一行,否则下一行可能不会执行。有关详细信息,请参阅实际发生的情况部分。

如何获取颜色?

如果您使用的是 PyPy,现在可以停止阅读了,因为 fancycompleter 会自动工作。

如果您使用的是 CPython on Linux/OSX 并且您使用 pipeasy_install 安装了 fancycompleter,它们会自动安装 pyrepl 作为依赖项,并且您也应该获得颜色。如果出于某种原因您不想使用 pyrepl,您应该继续阅读。

默认情况下,在 CPython 中,行输入和 TAB 完成由 GNU readline(至少在 Linux 上)处理。然而,readline 明确从完成项中删除转义序列,因此带有颜色的完成项无法正确显示。

有两种方法可以解决这个问题

  • (建议)完全不要使用 readline 并依赖 pyrepl
  • 使用允许颜色的 readline 的修补版本

默认情况下,fancycompleter 会尝试使用 pyrepl,如果找到它的话。要获取颜色,您需要一个最新版本,>= 0.8.2。

从版本 0.6.1 开始,fancycompleter 也支持在 Windows 上工作,它依赖于 pyreadline。在撰写本文时,pyreadline 的最新版本是 2.1,它不支持带有颜色的完成项;这里是添加了对它们的支持的请求。要启用颜色,您可以使用以下命令从这个分支安装 pyreadline

pip install --upgrade https://github.com/antocuni/pyreadline/tarball/master

如果您使用的是 Python 3pyrepl 不会工作,因此没有安装。您获取颜色的唯一选项是使用下面解释的修补 readline

我真的很想使用 readline

此方法并不真正建议,但如果您真的想,您可以使用修补的 readline:您可以在 misc/ 目录中找到补丁

您还可以尝试以下预编译版本,这些版本已在Ubuntu 10.10上测试过:请记住将它们放在链接器可以找到的位置,例如通过设置LD_LIBRARY_PATH

  • readline-6.0 用于 32位
  • readline-6.0 用于 64位

一旦安装完成,您应该双检查您是否可以找到它,例如通过在Python的readline.so模块上运行ldd

$ ldd /usr/lib/python2.6/lib-dynload/readline.so | grep readline
        libreadline.so.6 => /home/antocuni/local/32/lib/libreadline.so.6 (0x00ee7000)

最后,您需要强制fancycompleter使用颜色,因为默认情况下,它只在pyrepl中使用颜色:您可以通过在~/.fancycompleterrc.py中放置自定义配置文件来实现。一个示例配置文件在这里(请记住在文件名前放置一个点!)

自定义

要自定义fancycompleter的配置,您需要在您的家目录中放置一个名为.fancycompleterrc.py的文件。该文件必须包含一个名为Config的类,它继承自DefaultConfig并覆盖所需的值。

实际上发生了什么?

获取颜色的默认和首选方法是使用pyrepl。然而,没有方法可以告诉CPython在交互式提示符中使用pyrepl而不是内置的readline:这意味着即使我们在pyrepl的readline库中安装我们的补全器,交互式提示符也不会看到它。

通过避免使用内置提示符,简单地解决了这个问题:相反,我们使用一个基于code.InteractiveConsole的纯Python替换。这还带给我们一些便利,例如能够进行历史记录的多行编辑。

控制台由fancycompleter.interact()自动运行,随后是sys.exit():这样,如果我们从PYTHONSTARTUP中的脚本执行它,解释器就会在完成使用提示符(例如,通过按CTRL-D或调用quit())后立即退出。这样,我们就避免了进入内置提示符,并获得了与默认行为相似的行为。这就是为什么在这个配置中,在fancycompleter.interact()之后可能会运行不行的原因。

请注意,如果我们使用readline而不是pyrepl,则不需要这种技巧,因此interact()将简单地返回,让内置提示符出现。同样,如果我们在运行PyPy,这也是正确的,因为其内置提示符基于pyrepl。

项目详情


下载文件

下载适用于您平台上的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

fancycompleter-0.9.1.tar.gz (10.9 kB 查看哈希值)

构建分布

fancycompleter-0.9.1-py3-none-any.whl (9.7 kB 查看哈希值)

上传于 Python 3

由以下机构支持