gpt4 book ai didi

python - Python 选项卡完成时的重复输出 (OsX 10.8)

转载 作者:太空狗 更新时间:2023-10-29 21:07:32 25 4
gpt4 key购买 nike

使用下面的代码片段,我向 python 解释器添加了制表符补全。

import readline
import rlcompleter
if 'libedit' in readline.__doc__:
readline.parse_and_bind("bind ^I rl_complete")
else:
readline.parse_and_bind("tab: complete")

但是,我遇到了一个奇怪的行为,在按下 TAB 键后,解释器会给出重复项:

Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> d=dict()
>>> d.
Display all 108 possibilities? (y or n)
d.__class__( d.__class__( d.__class__(
d.__class__( d.__cmp__( d.__cmp__(
d.__contains__( d.__contains__( d.__delattr__(
d.__delattr__( d.__delattr__( d.__delitem__(
d.__delitem__( d.__doc__ d.__doc__
d.__doc__ d.__eq__( d.__eq__(
d.__format__( d.__format__( d.__format__(
d.__ge__( d.__ge__( d.__getattribute__(
d.__getattribute__( d.__getattribute__( d.__getitem__(
d.__getitem__( d.__gt__( d.__gt__(
d.__hash__ d.__hash__ d.__hash__
d.__init__( d.__init__( d.__init__(
d.__iter__( d.__iter__( d.__le__(
d.__le__( d.__len__( d.__len__(
d.__lt__( d.__lt__( d.__ne__(
d.__ne__( d.__new__( d.__new__(
d.__new__( d.__reduce__( d.__reduce__(
d.__reduce__( d.__reduce_ex__( d.__reduce_ex__(
d.__reduce_ex__( d.__repr__( d.__repr__(
d.__repr__( d.__setattr__( d.__setattr__(
d.__setattr__( d.__setitem__( d.__setitem__(
d.__sizeof__( d.__sizeof__( d.__sizeof__(
d.__str__( d.__str__( d.__str__(
d.__subclasshook__( d.__subclasshook__( d.__subclasshook__(
d.clear( d.clear( d.copy(
d.copy( d.fromkeys( d.fromkeys(
d.get( d.get( d.has_key(
d.has_key( d.items( d.items(
d.iteritems( d.iteritems( d.iterkeys(
d.iterkeys( d.itervalues( d.itervalues(
d.keys( d.keys( d.pop(
d.pop( d.popitem( d.popitem(
d.setdefault( d.setdefault( d.update(
d.update( d.values( d.values(
d.viewitems( d.viewitems( d.viewkeys(
d.viewkeys( d.viewvalues( d.viewvalues(

108种可能性!最少 2 次,最多 4 次重复。

此外,

  • 如果我将 dict 子类化,可能性的总数会增加到 160(然后增加到 209、258)。
  • 如果我为 TAB 键入了足够的字符来确定命令,它不会显示重复项。

欢迎任何指点或调试提示。

最佳答案

我已经通过添加自定义完成器解决了这个问题。它现在按预期工作。

import readline
import rlcompleter

c = rlcompleter.Completer()

def complete(text, state):
buffer = readline.get_line_buffer()
first = c.complete(buffer, 0)
if state == 0:
return first
current = c.complete(buffer, state)
if current != first:
return current

readline.parse_and_bind('bind ^I rl_complete')
readline.set_completer(complete)

关于python - Python 选项卡完成时的重复输出 (OsX 10.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15543102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com