Akhir dari gerakan blok python

13

Saya membutuhkan gerakan yang bergerak ke akhir / awal blok python, dan saya membutuhkan gerakan lain yang bergerak ke awal / akhir metode / kelas sebelumnya / berikutnya (semua kombinasi).

Saya sudah mencoba vim-indent-object, python-mode, chapa, vim-python-object, dll. Tidak ada yang mendukung end of block, dan tidak ada yang mendukung semua kombinasi gerakan di atas.

Saya ingat sekali waktu saya memiliki sebuah plugin yang disediakan ]], [[, ][dan []gerakan untuk awal / akhir sebelumnya / berikutnya metode / kelas, tapi aku tidak bisa menemukannya di direktori saya terpasang (mencari "] [" dan "[]" di direktori saya yang terhubung dan menganalisis semua kejadian tetapi tidak menemukan apa pun yang mendefinisikan "] [" atau "[]").

Apakah Anda tahu plugin yang saya gunakan? Apakah Anda tahu ada plugin yang menyediakan fungsi ini?

Sassan
sumber
3
[[dan ]], disediakan oleh ftplugin python default.
romainl
1
Terima kasih @romainl untuk info, saya tahu tentang [[, ]], (, ), {dan }. [[dan ]]berguna dalam beberapa kasus tetapi masalah utama saya adalah saya perlu []dan ][atau sesuatu seperti itu, yang memberikan lompatan ke akhir metode / kelas berikutnya / sebelumnya.
Sassan
1
@muru terima kasih, ini ]ememecahkan sebagian besar masalah saya, namun beberapa pemetaan dalam plugin ini tampaknya rusak seperti ]vatau ]>saya akan mencoba memperbaikinya dalam garpu dan mempublikasikannya. Meskipun saya masih bertanya-tanya apa plugin yang disediakan ][dan []itu benar-benar bermanfaat.
Sassan

Jawaban:

11

Dengan pembaruan terbaru (Nov 2017) dari $VIMRUNTIME/ftplugin/python.vimgerakan spesifik ft berikut kini tersedia untuk bahasa python

  • [[ Lompat mundur untuk memulai tingkat tertinggi saat ini / sebelumnya
  • [] Lompat mundur ke ujung tingkat teratas sebelumnya
  • ][ Lompat ke depan ke ujung tingkat saat ini
  • ]] Lompat ke depan untuk memulai tingkat atas berikutnya
  • [m Melompat mundur untuk memulai metode / ruang lingkup saat ini / sebelumnya
  • [M Lompat mundur ke akhir metode / ruang lingkup sebelumnya
  • ]M Melompat ke depan ke akhir metode / lingkup saat ini / berikutnya
  • ]m Lompat ke depan untuk memulai metode / ruang lingkup berikutnya

Contoh file python

class previous:             # [[[[

    def method_first:
        pass
    # ...

    def method_last:
        pass                # []

class current:              # [[ or [m...[m[m

    def method_first:       # [[]m or [m...[m
        pass                # [[]M or [M...[M
    # ...

    def method_previous:    # [m[m
        pass                # [M

    def method_current:     # [m
        # CURSOR <---------------------------
        pass                # ]M

    def method_next:        # ]m
        pass                # ]M]M
    # ...

    def method_last:        # ][[m or ]m...]m
        pass                # ][   or ]M...]M

class previous:             # ]]   or ]m...]m]m

    def method_first:
        pass
    # ...

def global_func:            # ]]]]
    pass

Pembaruan ini harus disertakan jika tingkat tambalan vim Anda setidaknya 8.0.1256.

Jika Anda tidak dapat memperbarui tetapi ingin menggunakan fungsi ini, Anda dapat menginstal versi terbaru ke ~/.vimdirektori:

$ curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.vim/ftplugin/python.vim

Plugin Pythonsense

Plugin ini memberikan gerakan serupa tetapi sedikit dimodifikasi:

Stok Vim 8.0 "gerakan" kelas (" ]]", " [[", dll.), Menemukan blok yang dimulai pada kolom pertama, terlepas dari apakah ini adalah blok kelas atau fungsi, sedangkan metode / fungsinya gerakan (" [m", " ]m", dll.) menemukan semua blok di indentasi apa pun terlepas dari apakah ini adalah blok kelas atau fungsi. Sebaliknya, gerakan kelas "Pythonsense" bekerja untuk menemukan semua dan hanya definisi kelas, terlepas dari tingkat indentasinya, sedangkan gerakan metode / fungsinya bekerja untuk menemukan semua dan hanya definisi metode / fungsi, terlepas dari tingkat indentasinya.

Semua detail dan contoh diberikan di https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .

Hotschke
sumber
Saya harus menunggu sampai neovim membawa tambalan ini.
Sassan
1
Saya kira untuk saat ini Anda dapat menginstalnya secara manual curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke