Ipython: Cambiar autocompletar en la pestaña a ctrl-espacio

Creado en 11 abr. 2017  ·  4Comentarios  ·  Fuente: ipython/ipython

Hola,

Me gustaría cambiar el enlace de teclas para autocompletar a ctrl-space. Lo había leído aquí: http://ipython.readthedocs.io/en/latest/config/details.html#keyboard -shortcuts. Pero no estoy seguro de cómo lo haría.

Comentario más útil

Básicamente, solo necesita agregar este código a cualquier archivo de inicio en su perfil:

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)

Sin embargo, siempre debe verificar que está ejecutando el terminal con PTK antes de ejecutar ese código. Algo como esto debería funcionar:

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

Nota: Puede poner la lógica de registro en un bloque if, pero el uso de una función evita que nombres como bind_key filtren en el espacio de nombres de su sesión. Una vez que haya definido un montón de enlaces y filtros personalizados, terminará creando bastantes nombres que, de lo contrario, tendría que eliminar manualmente. Ponerlo todo en una función y luego borrar el nombre de la función es más limpio. Para el caso simple anterior, probablemente sería mejor un bloque if.

Todos 4 comentarios

Básicamente, solo necesita agregar este código a cualquier archivo de inicio en su perfil:

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)

Sin embargo, siempre debe verificar que está ejecutando el terminal con PTK antes de ejecutar ese código. Algo como esto debería funcionar:

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

Nota: Puede poner la lógica de registro en un bloque if, pero el uso de una función evita que nombres como bind_key filtren en el espacio de nombres de su sesión. Una vez que haya definido un montón de enlaces y filtros personalizados, terminará creando bastantes nombres que, de lo contrario, tendría que eliminar manualmente. Ponerlo todo en una función y luego borrar el nombre de la función es más limpio. Para el caso simple anterior, probablemente sería mejor un bloque if.

¡Funcionó! ¡Gracias por responderme tan rápido!

Cuando intento ejecutar lo anterior, obtengo AttributeError: 'TerminalInteractiveShell' object has no attribute 'pt_cli' . ¿Es este un problema conocido?

escriba lo siguiente en sus preferencias de usuario de atajos de teclado

{
    "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"
        }

    ]
}
¿Fue útil esta página
0 / 5 - 0 calificaciones