Fin del movimiento del bloque de pitón

13

Necesito un movimiento que se mueva al final / principio de un bloque de python, y necesito otro movimiento que se mueva al principio / final del método / clase anterior / siguiente (todas las combinaciones).

He intentado vim-indent-object, python-mode, chapa, vim-python-object, etc. Ninguno de ellos admite el final del bloque, y ninguno admite todas las combinaciones de los movimientos anteriores.

Recuerdo que una vez un tiempo tuve un plugin que proporciona ]], [[, ][y []propuestas de begining / final de / siguiente método / clase anterior, pero yo no lo encuentro en mi directorio enchufado (buscado "] [" y "[]" en mi directorio conectado y analicé todas las ocurrencias pero no encontré nada que defina "] [" o "[]").

¿Conoces el complemento que solía usar? ¿Conoces algún complemento que brinde esta funcionalidad?

Sassan
fuente
3
[[y ]], son proporcionados por el ftplugin predeterminado de python.
romainl
1
@romainl Gracias por la información, lo que sé de [[, ]], (, ), {y }. [[y ]]son útiles en algunos casos, pero mi problema principal es que necesito []y / ][o algo así, que proporciona saltos al final del método / clase siguiente / anterior.
Sassan
1
@muru gracias, ]eresuelve la mayoría de mis problemas, sin embargo, algunas asignaciones en este complemento parecen estar rotas ]vo ]>intentaré solucionarlas en un tenedor y publicarlo. Aunque todavía me pregunto cuál fue el complemento que proporcionó ][y []fue realmente útil.
Sassan

Respuestas:

11

Con la actualización reciente (noviembre de 2017) de los $VIMRUNTIME/ftplugin/python.vimsiguientes movimientos específicos de ft ahora están disponibles para el lenguaje python

  • [[ Salta hacia atrás para comenzar el nivel superior actual / anterior
  • [] Salta hacia atrás hasta el final del nivel superior anterior
  • ][ Salta hacia adelante hasta el final del nivel superior actual
  • ]] Salta hacia adelante para comenzar el siguiente nivel superior
  • [m Salte hacia atrás para comenzar con el método / alcance actual / anterior
  • [M Saltar hacia atrás al final del método / alcance anterior
  • ]M Avanzar al final del método / alcance actual / siguiente
  • ]m Salte hacia adelante para comenzar el próximo método / alcance

Archivo de ejemplo de 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

Esta actualización debe incluirse si su nivel de parche vim es al menos 8.0.1256.

Si no puede actualizar pero desea utilizar esta funcionalidad, puede instalar la versión más reciente en el ~/.vimdirectorio:

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

Plugin Pythonsense

Este complemento proporciona movimientos similares pero ligeramente modificados:

Los movimientos de "clase" de stock Vim 8.0 (" ]]", " [[", etc.), encuentran bloques que comienzan en la primera columna, independientemente de si son bloques de clase o función, mientras que sus movimientos de método / función (" [m", " ]m", etc.) encuentra todos los bloques en cualquier sangría, independientemente de si se trata de bloques de clase o función. Por el contrario, los movimientos de clase "Pythonsense" funcionan para encontrar todas y solo las definiciones de clase, independientemente de su nivel de sangría, mientras que sus movimientos de método / función funcionan para encontrar todas y solo las definiciones de método / función, independientemente de su nivel de sangría.

Todos los detalles y ejemplos se dan en https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .

Hotschke
fuente
Debería esperar hasta que Neovim traiga este parche.
Sassan
1
Supongo que por el momento podría instalarlo manualmente curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke