Ipython: Измените автозаполнение на вкладке на ctrl-space

Созданный на 11 апр. 2017  ·  4Комментарии  ·  Источник: ipython/ipython

Привет,

Я хотел бы изменить привязку клавиш для автозаполнения к ctrl-space. Я читал об этом здесь: http://ipython.readthedocs.io/en/latest/config/details.html#keyboard -shortcuts. Но я не уверен, как бы я это сделал.

Самый полезный комментарий

По сути, вам просто нужно добавить этот код в любой файл запуска в вашем профиле:

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)

Вы действительно должны всегда проверять, что вы запускаете терминал с PTK, прежде чем запускать этот код. Примерно так должно работать:

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, но использование функции останавливает утечку таких имен, как 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)

Вы действительно должны всегда проверять, что вы запускаете терминал с PTK, прежде чем запускать этот код. Примерно так должно работать:

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, но использование функции останавливает утечку таких имен, как 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 рейтинги