Ende der Python-Block-Bewegung

13

Ich brauche eine Bewegung, die sich zum Ende / Anfang eines Python-Blocks bewegt, und ich brauche eine andere Bewegung, die sich zum Anfang / Ende der vorherigen / nächsten Methode / Klasse (alle Kombinationen) bewegt.

Ich habe vim-indent-object, python-mode, chapa, vim-python-object usw. ausprobiert. Keines von ihnen unterstützt das Ende des Blocks, und keines von ihnen unterstützt alle Kombinationen der obigen Bewegungen.

Ich erinnere mich, dass ich einmal ein Plugin hatte, das bereitgestellt ]]wurde [[, ][und []Anträge für den Beginn / das Ende der vorherigen / nächsten Methode / Klasse, aber ich kann es nicht in meinem eingesteckten Verzeichnis finden (gesucht "] [" und "[]"). in meinem eingesteckten Verzeichnis und analysierte alle Vorkommen, fand aber nichts, was "] [" oder "[]" definiert.

Kennen Sie das Plugin, das ich verwendet habe? Kennen Sie ein Plugin, das diese Funktionalität bietet?

Sassan
quelle
3
[[und ]]werden vom Standard-Python-FTP-Plugin bereitgestellt.
Romainl
1
@romainl Danke für Info, weiß ich [[, ]], (, ), {und }. [[und ]]sind in einigen Fällen nützlich, aber mein Hauptproblem ist, dass ich []und ][oder so etwas brauche , was Sprünge zum Ende der nächsten / vorherigen Methode / Klasse bietet.
Sassan
1
@muru danke, es ]elöst die meisten meiner Probleme, aber einige Zuordnungen in diesem Plugin scheinen kaputt zu sein, ]voder ]>ich werde versuchen, sie in einer Gabel zu reparieren und zu veröffentlichen. Obwohl ich mich immer noch frage, was das Plugin war, das bereitgestellt wurde ][und []es war wirklich nützlich.
Sassan

Antworten:

11

Mit dem letzten Update (Nov 2017) $VIMRUNTIME/ftplugin/python.vimsind nun folgende ft-spezifische Bewegungen für die Python-Sprache verfügbar

  • [[ Zum Anfang der aktuellen / vorherigen obersten Ebene zurückspringen
  • [] Springe zurück zum Ende des vorherigen Toplevels
  • ][ Vorwärtsspringen zum Ende der aktuellen obersten Ebene
  • ]] Vorwärts springen, um mit dem nächsten Toplevel zu beginnen
  • [m Zurückspringen, um mit der aktuellen / vorherigen Methode / dem aktuellen Bereich zu beginnen
  • [M Zurückspringen zum Ende der vorherigen Methode / des vorherigen Bereichs
  • ]M Vorwärtsspringen zum Ende der aktuellen / nächsten Methode / des nächsten Bereichs
  • ]m Vorwärts springen, um mit der nächsten Methode / dem nächsten Bereich zu beginnen

Beispiel Python-Datei

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

Dieses Update sollte enthalten sein, wenn Ihr VIM-Patch-Level mindestens ist 8.0.1256.

Wenn Sie nicht aktualisieren können, aber diese Funktionalität verwenden möchten, können Sie die neueste Version in das ~/.vimVerzeichnis installieren :

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

Plugin Pythonsense

Dieses Plugin bietet ähnliche Bewegungen, jedoch leicht modifiziert:

Die Standardbewegungen der Klasse Vim 8.0 (" ]]", " [[" usw.) finden Blöcke, die in der ersten Spalte beginnen, unabhängig davon, ob es sich um Klassen- oder Funktionsblöcke handelt, während ihre Methoden- / Funktionsbewegungen (" [m", " ]m" usw.) findet alle Blöcke an einem beliebigen Einzug, unabhängig davon, ob es sich um Klassen- oder Funktionsblöcke handelt. Im Gegensatz dazu finden Klassenbewegungen von "Pythonsense" alle und nur Klassendefinitionen, unabhängig von ihrer Einrückungsstufe, und Methoden- / Funktionsbewegungen alle und nur Methoden- / Funktionsdefinitionen, unabhängig von ihrer Einrückungsstufe.

Alle Details und Beispiele finden Sie unter https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .

Hotschke
quelle
Ich sollte warten, bis Neovim diesen Patch bringt.
Sassan
1
Ich schätze vorerst könnten Sie es manuell installieren curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke