Ipython: Alterar o preenchimento automático na guia para ctrl-espaço

Criado em 11 abr. 2017  ·  4Comentários  ·  Fonte: ipython/ipython

Olá,

Eu gostaria de alterar a ligação da tecla para autocomplete para ctrl-espaço. Eu tinha lido sobre isso aqui: http://ipython.readthedocs.io/en/latest/config/details.html#keyboard -shortcuts. Mas não tenho certeza de como faria isso.

Comentários muito úteis

Basicamente, você só precisa adicionar este código a qualquer arquivo de inicialização em seu 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)

Você realmente deve sempre verificar se está executando o terminal com PTK antes de executar esse código. Algo assim deve 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: Você poderia colocar a lógica de registro em um bloco if, mas usar uma função impede que nomes como bind_key vazem para o namespace da sua sessão. Depois de definir várias ligações e filtros personalizados, você acaba criando muitos nomes que, de outra forma, teria que excluir manualmente. Colocar tudo em uma função e, em seguida, excluir o nome da função é mais limpo. Para o caso simples acima, um bloco if provavelmente seria melhor.

Todos 4 comentários

Basicamente, você só precisa adicionar este código a qualquer arquivo de inicialização em seu 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)

Você realmente deve sempre verificar se está executando o terminal com PTK antes de executar esse código. Algo assim deve 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: Você poderia colocar a lógica de registro em um bloco if, mas usar uma função impede que nomes como bind_key vazem para o namespace da sua sessão. Depois de definir várias ligações e filtros personalizados, você acaba criando muitos nomes que, de outra forma, teria que excluir manualmente. Colocar tudo em uma função e, em seguida, excluir o nome da função é mais limpo. Para o caso simples acima, um bloco if provavelmente seria melhor.

Funcionou! Obrigado por entrar em contato comigo tão rapidamente!

Quando tento executar o procedimento acima, obtenho AttributeError: 'TerminalInteractiveShell' object has no attribute 'pt_cli' . Isso é um problema conhecido?

escreva o seguinte nas suas preferências de usuário de atalhos 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"
        }

    ]
}
Esta página foi útil?
0 / 5 - 0 avaliações