Fine del movimento del blocco pitone


13

Ho bisogno di un movimento che si sposta alla fine / inizio di un blocco Python e ho bisogno di un altro movimento che si sposta all'inizio / alla fine del metodo / classe precedente / successivo (tutte le combinazioni).

Ho provato vim-indent-object, python-mode, chapa, vim-python-object, ecc. Nessuno di essi supporta la fine del blocco e nessuno di essi supporta tutte le combinazioni dei movimenti precedenti.

Mi ricordo che una volta ho avuto un plugin che ha fornito ]], [[, ][e []proposte di begining / fine del precedente / successivo metodo / classe, ma non riesco a trovare nel mio elenco collegato (cercato "] [" e "[]" nella mia directory collegata e analizzato tutte le occorrenze ma non ho trovato nulla che definisca "] [" o "[]").

Conosci il plugin che usavo? Conosci qualche plugin che fornisce questa funzionalità?



3
[[e ]], sono forniti dal ftplugin predefinito di Python.
romainl

1
Grazie @romainl per info, mi conoscono [[, ]], (, ), {e }. [[e ]]sono utili in alcuni casi, ma il mio problema principale è che ho bisogno []e ][o qualcosa di simile, che fornisce salta alla fine della prossima / precedente metodo / classe.
Sassan,

1
@muru grazie, ]erisolve la maggior parte dei miei problemi, tuttavia alcune mappature in questo plugin sembrano essere rotte come ]vo ]>proverò a risolverle in un fork e pubblicarle. Anche se mi chiedo ancora quale fosse il plug-in che ha fornito ][ed []è stato davvero utile.
Sassan,

Risposte:


11

Con il recente aggiornamento (novembre 2017) dei $VIMRUNTIME/ftplugin/python.vimseguenti movimenti specifici per ft sono ora disponibili per il linguaggio Python

  • [[ Salta indietro per iniziare il livello superiore attuale / precedente
  • [] Salta indietro alla fine del livello superiore precedente
  • ][ Salta in avanti fino alla fine del livello attuale
  • ]] Salta in avanti per iniziare il prossimo livello superiore
  • [m Salta indietro per iniziare il metodo / ambito corrente / precedente
  • [M Salta indietro alla fine del metodo / ambito precedente
  • ]M Salta in avanti fino alla fine del metodo / ambito corrente / successivo
  • ]m Salta in avanti per iniziare il metodo / ambito successivo

Esempio di 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

Questo aggiornamento dovrebbe essere incluso se il livello della tua patch vim è almeno 8.0.1256.

Se non riesci ad aggiornare ma vuoi usare questa funzionalità, puoi installare la versione più recente nella ~/.vimdirectory:

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

Plugin Pythonsense

Questo plugin fornisce movimenti simili ma leggermente modificati:

I movimenti "class" di classe Vim 8.0 (" ]]", " [[", ecc.), Trovano blocchi che iniziano nella prima colonna, indipendentemente dal fatto che si tratti o meno di blocchi di classe o funzione, mentre i suoi movimenti metodo / funzione (" [m", " ]m", ecc.) trovano tutti i blocchi in qualsiasi rientro indipendentemente dal fatto che si tratti di blocchi di classe o funzione. Al contrario, i movimenti di classe "Pythonsense" lavorano per trovare tutte e solo le definizioni di classe, indipendentemente dal loro livello di rientro, mentre i movimenti di metodo / funzione lavorano per trovare tutte e solo le definizioni di metodo / funzione, indipendentemente dal loro livello di rientro.

Tutti i dettagli e gli esempi sono disponibili su https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .


Dovrei aspettare che Neovim porti questa patch.
Sassan,

1
Immagino per ora che tu possa installarlo manualmente curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.