Ipython: Ubah pelengkapan otomatis pada tab menjadi ctrl-space

Dibuat pada 11 Apr 2017  ·  4Komentar  ·  Sumber: ipython/ipython

Halo,

Saya ingin mengubah pengikatan kunci untuk pelengkapan otomatis menjadi ctrl-space. Saya telah membacanya di sini: http://ipython.readthedocs.io/en/latest/config/details.html#keyboard -shortcuts. Tapi saya tidak yakin bagaimana saya akan melakukannya.

Komentar yang paling membantu

Pada dasarnya, Anda hanya perlu menambahkan kode ini ke file startup apa pun di profil Anda:

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)

Anda harus benar-benar selalu memeriksa apakah Anda menjalankan terminal dengan PTK sebelum Anda menjalankan kode itu. Sesuatu seperti ini seharusnya berfungsi:

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

Catatan: Anda dapat menempatkan logika pendaftaran di blok if, tetapi menggunakan fungsi menghentikan nama seperti bind_key bocor ke namespace sesi Anda. Setelah Anda memiliki banyak ikatan dan filter khusus yang ditentukan, Anda akhirnya membuat cukup banyak nama yang seharusnya Anda hapus secara manual. Menempatkan semuanya dalam suatu fungsi, lalu menghapus nama fungsi itu lebih bersih. Untuk kasus sederhana di atas, blok if mungkin akan lebih baik.

Semua 4 komentar

Pada dasarnya, Anda hanya perlu menambahkan kode ini ke file startup apa pun di profil Anda:

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)

Anda harus benar-benar selalu memeriksa apakah Anda menjalankan terminal dengan PTK sebelum Anda menjalankan kode itu. Sesuatu seperti ini seharusnya berfungsi:

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

Catatan: Anda dapat menempatkan logika pendaftaran di blok if, tetapi menggunakan fungsi menghentikan nama seperti bind_key bocor ke namespace sesi Anda. Setelah Anda memiliki banyak ikatan dan filter khusus yang ditentukan, Anda akhirnya membuat cukup banyak nama yang seharusnya Anda hapus secara manual. Menempatkan semuanya dalam suatu fungsi, lalu menghapus nama fungsi itu lebih bersih. Untuk kasus sederhana di atas, blok if mungkin akan lebih baik.

Itu berhasil! Terima kasih telah kembali padaku begitu cepat!

Ketika saya mencoba menjalankan yang di atas, saya mendapatkan AttributeError: 'TerminalInteractiveShell' object has no attribute 'pt_cli' . Apakah ini masalah yang diketahui?

tulis yang berikut ini ke preferensi pengguna Anda dari pintasan keyboard

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

    ]
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat