Autofill and tab in PDB

I am trying to get a TAB to do something else other than insert a tab at the prompt (pdb).

What I mean causes autocomplete, for example, in here or here , but the tab key does nothing but add tabs to pdb.

So using

  (pdb) var + tabKeyPressed

I want to receive:

  (pdb) variable

instead:

  (pdb) var []
+7
source share
2 answers

iPython is a third-party solution to this problem. Sometimes you can only rely on vanilla Python. I found 2 solutions for it.

The solution for each shell is the "rlcompleter" module:

$ python3 Python 3.4.3 (default, Sep 14 2016, 12:36:27) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pdb >>> pdb.set_trace() --Return-- > <stdin>(1)<module>()->None # press tab - but nothing (Pdb) str. *** SyntaxError: invalid syntax (Pdb) --KeyboardInterrupt-- (Pdb) c >>> import rlcompleter >>> pdb.Pdb.complete=rlcompleter.Completer(locals()).complete >>> pdb.set_trace() --Return-- > <stdin>(1)<module>()->None (Pdb) str. str.__add__( str.__getattribute__( str.__name__ str.__text_signature__ str.isdigit( str.rfind( str.__base__( str.__getitem__( str.__ne__( str.__weakrefoffset__ str.isidentifier( str.rindex( str.__bases__ str.__getnewargs__( str.__new__( str.capitalize( str.islower( str.rjust( str.__basicsize__ str.__gt__( str.__prepare__( str.casefold( str.isnumeric( str.rpartition( str.__call__( str.__hash__( str.__qualname__ str.center( str.isprintable( str.rsplit( str.__class__( str.__init__( str.__reduce__( str.count( str.isspace( str.rstrip( str.__contains__( str.__instancecheck__( str.__reduce_ex__( str.encode( str.istitle( str.split( str.__delattr__( str.__itemsize__ str.__repr__( str.endswith( str.isupper( str.splitlines( str.__dict__ str.__iter__( str.__rmod__( str.expandtabs( str.join( str.startswith( str.__dictoffset__ str.__le__( str.__rmul__( str.find( str.ljust( str.strip( str.__dir__( str.__len__( str.__setattr__( str.format( str.lower( str.swapcase( str.__doc__ str.__lt__( str.__sizeof__( str.format_map( str.lstrip( str.title( str.__eq__( str.__mod__( str.__str__( str.index( str.maketrans( str.translate( str.__flags__ str.__module__ str.__subclasscheck__( str.isalnum( str.mro( str.upper( str.__format__( str.__mro__ str.__subclasses__( str.isalpha( str.partition( str.zfill( str.__ge__( str.__mul__( str.__subclasshook__( str.isdecimal( str.replace( (Pdb) c >>> 

System-wide solution - use file ~ / .pdbrc

 $ cat ~/.pdbrc import rlcompleter pdb.Pdb.complete=rlcompleter.Completer(locals()).complete $ python3 Python 3.4.3 (default, Sep 14 2016, 12:36:27) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pdb >>> pdb.set_trace() --Return-- > <stdin>(1)<module>()->None (Pdb) str. str.__add__( str.__getattribute__( str.__name__ str.__text_signature__ str.isdigit( str.rfind( str.__base__( str.__getitem__( str.__ne__( str.__weakrefoffset__ str.isidentifier( str.rindex( str.__bases__ str.__getnewargs__( str.__new__( str.capitalize( str.islower( str.rjust( str.__basicsize__ str.__gt__( str.__prepare__( str.casefold( str.isnumeric( str.rpartition( str.__call__( str.__hash__( str.__qualname__ str.center( str.isprintable( str.rsplit( str.__class__( str.__init__( str.__reduce__( str.count( str.isspace( str.rstrip( str.__contains__( str.__instancecheck__( str.__reduce_ex__( str.encode( str.istitle( str.split( str.__delattr__( str.__itemsize__ str.__repr__( str.endswith( str.isupper( str.splitlines( str.__dict__ str.__iter__( str.__rmod__( str.expandtabs( str.join( str.startswith( str.__dictoffset__ str.__le__( str.__rmul__( str.find( str.ljust( str.strip( str.__dir__( str.__len__( str.__setattr__( str.format( str.lower( str.swapcase( str.__doc__ str.__lt__( str.__sizeof__( str.format_map( str.lstrip( str.title( str.__eq__( str.__mod__( str.__str__( str.index( str.maketrans( str.translate( str.__flags__ str.__module__ str.__subclasscheck__( str.isalnum( str.mro( str.upper( str.__format__( str.__mro__ str.__subclasses__( str.isalpha( str.partition( str.zfill( str.__ge__( str.__mul__( str.__subclasshook__( str.isdecimal( str.replace( (Pdb) c >>> 

Notes:

+4
source

ipdb for rescue.

ipdb exports functions for accessing the IPython debugger, which functions tab completion , syntax highlighting, better tracing, better introspection with the same interface as the pdb module.

+7
source

All Articles