Ipython: рдЯреИрдм рдкрд░ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдХреЛ ctrl-space рдореЗрдВ рдмрджрд▓реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ipython/ipython

рдирдорд╕реНрддреЗ,

рдореИрдВ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдХреЗ рд▓рд┐рдП ctrl-space рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдкрдврд╝рд╛ рдерд╛: http://ipython.readthedocs.io/en/latest/config/details.html#keyboard -рд╢реЙрд░реНрдЯрдХрдЯред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реВрдВрдЧрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореВрд▓ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

from prompt_toolkit.keys import Keys
from prompt_toolkit.key_binding.bindings.completion import generate_completions

ip = get_ipython()
bind_key = ip.pt_cli.application.key_bindings_registry.add_binding
bind_key(Keys.ControlSpace)(generate_completions)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдкреАрдЯреАрдХреЗ рдХреЗ рд╕рд╛рде рдЯрд░реНрдорд┐рдирд▓ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдРрд╕рд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

def register_bindings():

    from prompt_toolkit.keys import Keys
    from prompt_toolkit.key_binding.bindings.completion import generate_completions

    bind_key = ip.pt_cli.application.key_bindings_registry.add_binding
    bind_key(Keys.ControlSpace)(generate_completions)

ip = get_ipython()
if getattr(ip, "pt_cli"): register_bindings()
del register_bindings

рдиреЛрдЯ: рдЖрдк рдкрдВрдЬреАрдХрд░рдг рддрд░реНрдХ рдХреЛ if-block рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рд╕рддреНрд░ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ bind_key рд▓реАрдХ рд╣реЛрдиреЗ рдЬреИрд╕реЗ рдирд╛рдо рд░реБрдХ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд╛рдо рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдЕрдиреНрдпрдерд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдм рдПрдХ рдлрдВрдХреНрд╢рди рдореЗрдВ рд░рдЦрдирд╛, рдлрд┐рд░ рдлрдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╣рдЯрд╛рдирд╛ рдХреНрд▓реАрдирд░ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдПрдХ if-block рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореВрд▓ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

from prompt_toolkit.keys import Keys
from prompt_toolkit.key_binding.bindings.completion import generate_completions

ip = get_ipython()
bind_key = ip.pt_cli.application.key_bindings_registry.add_binding
bind_key(Keys.ControlSpace)(generate_completions)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдкреАрдЯреАрдХреЗ рдХреЗ рд╕рд╛рде рдЯрд░реНрдорд┐рдирд▓ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдРрд╕рд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

def register_bindings():

    from prompt_toolkit.keys import Keys
    from prompt_toolkit.key_binding.bindings.completion import generate_completions

    bind_key = ip.pt_cli.application.key_bindings_registry.add_binding
    bind_key(Keys.ControlSpace)(generate_completions)

ip = get_ipython()
if getattr(ip, "pt_cli"): register_bindings()
del register_bindings

рдиреЛрдЯ: рдЖрдк рдкрдВрдЬреАрдХрд░рдг рддрд░реНрдХ рдХреЛ if-block рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рд╕рддреНрд░ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ bind_key рд▓реАрдХ рд╣реЛрдиреЗ рдЬреИрд╕реЗ рдирд╛рдо рд░реБрдХ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд╛рдо рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдЕрдиреНрдпрдерд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдм рдПрдХ рдлрдВрдХреНрд╢рди рдореЗрдВ рд░рдЦрдирд╛, рдлрд┐рд░ рдлрдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╣рдЯрд╛рдирд╛ рдХреНрд▓реАрдирд░ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдПрдХ if-block рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рд╡реЛ рдХрд░ рдЧрдпрд╛ рдХрд╛рдо! рдЗрддрдиреА рдЬрд▓реНрджреА рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЬрдм рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ AttributeError: 'TerminalInteractiveShell' object has no attribute 'pt_cli' ред рдХреНрдпрд╛ рдпрд╣ рдЬрд╛рдирд╛ рдкрд╣рдЪрд╛рдирд╛ рд╣реБрдЖ рдореБрджреНрджрд╛ рд╣реИ?

рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХреА рдЕрдкрдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ

{
    "shortcuts":[
        {
            "command": "completer:invoke-file",
            "keys": [
                "Ctrl Space"
            ],
            "selector": ".jp-FileEditor .jp-mod-completer-enabled"
        },
        {
            "command": "completer:invoke-file",
            "keys": [
                "Ctrl Space"
            ],
            "selector": ".jp-FileEditor .jp-mod-completer-enabled"
        },
        {
            "command": "completer:invoke-notebook",
            "keys": [
                "Ctrl Space"
            ],
            "selector": ".jp-Notebook.jp-mod-editMode .jp-mod-completer-enabled"
        }

    ]
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕