Fin du mouvement du bloc python

13

J'ai besoin d'un mouvement qui se déplace à la fin / au début d'un bloc python, et j'ai besoin d'un autre mouvement qui se déplace au début / à la fin de la méthode / classe précédente / suivante (toutes les combinaisons).

J'ai essayé vim-indent-object, python-mode, chapa, vim-python-object, etc. Aucun d'entre eux ne prend en charge la fin du bloc et aucun ne prend en charge toutes les combinaisons de mouvements ci-dessus.

Je me souviens une fois que j'avais un plug - in qui a fourni ]], [[, ][et []propositions de begining / fin de précédent / suivant la méthode / classe, mais je ne le trouve pas dans mon répertoire branché (recherche « ] [ » et « [] » dans mon répertoire branché et analysé toutes les occurrences mais n'a rien trouvé qui définisse "] [" ou "[]").

Connaissez-vous le plugin que j'utilisais? Connaissez-vous un plugin qui offre cette fonctionnalité?

Sassan
la source
3
[[et ]], sont fournis par le ftplugin python par défaut.
romainl
1
@romainl Merci pour info, je sais à propos de [[, ]], (, ), {et }. [[et ]]sont utiles dans certains cas, mais mon problème principal est que j'ai besoin []et / ][ou quelque chose comme ça, qui fournit des sauts à la fin de la méthode / classe suivante / précédente.
Sassan
1
@muru merci, cela ]erésout la plupart de mes problèmes, cependant certains mappages dans ce plugin semblent être cassés ]vou ]>j'essaierai de les corriger dans un fork et de le publier. Bien que je me demande toujours quel était le plugin fourni ][et []qu'il était vraiment utile.
Sassan

Réponses:

11

Avec la récente mise à jour (novembre 2017) des $VIMRUNTIME/ftplugin/python.vimmouvements spécifiques à ft suivants sont désormais disponibles pour le langage python

  • [[ Saut en arrière pour commencer le niveau supérieur actuel / précédent
  • [] Aller en arrière jusqu'à la fin du niveau supérieur précédent
  • ][ Aller en avant jusqu'à la fin du niveau supérieur actuel
  • ]] Sautez en avant pour commencer le prochain niveau supérieur
  • [m Saut en arrière pour commencer la méthode / portée actuelle / précédente
  • [M Aller en arrière à la fin de la méthode / portée précédente
  • ]M Aller en avant à la fin de la méthode / portée actuelle / suivante
  • ]m Aller de l'avant pour commencer la prochaine méthode / portée

Exemple de fichier 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

Cette mise à jour doit être incluse si votre niveau de correctif vim est au moins 8.0.1256.

Si vous ne pouvez pas mettre à jour mais souhaitez utiliser cette fonctionnalité, vous pouvez installer la version la plus récente dans le ~/.vimrépertoire:

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

Plugin Pythonsense

Ce plugin fournit des mouvements similaires mais légèrement modifiés:

Les mouvements stock "classe" Vim 8.0 (" ]]", " [[", etc.), trouvent des blocs qui commencent à la première colonne, qu'il s'agisse ou non de blocs de classe ou de fonction, tandis que ses mouvements de méthode / fonction (" [m", " ]m", etc.) trouve tous les blocs à n'importe quel retrait, qu'il s'agisse ou non de blocs de classe ou de fonction. En revanche, les mouvements de classe "Pythonsense" fonctionnent pour trouver toutes et uniquement les définitions de classe, quel que soit leur niveau de retrait, tandis que ses mouvements de méthode / fonction fonctionnent pour trouver toutes et seulement les définitions de méthode / fonction, quel que soit leur niveau de retrait.

Tous les détails et exemples sont donnés sur https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .

Hotschke
la source
Je devrais attendre que neovim apporte ce patch.
Sassan
1
Je suppose que pour le moment, vous pouvez l'installer manuellement curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke