Fim do movimento do bloco python


13

Eu preciso de um movimento que se mova para o fim / início de um bloco python, e eu preciso de outro movimento que se mova para o início / fim do método / classe anterior / seguinte (todas as combinações).

Eu tentei vim-indent-object, python-mode, chapa, vim-python-object, etc. Nenhum deles suporta o fim do bloco e nenhum deles suporta todas as combinações dos movimentos acima.

Lembro-me de certa vez eu tive um plugin que forneceu ]], [[, ][e []propostas de começando / fim da anterior / seguinte método / classe, mas eu não posso encontrá-lo em meu diretório conectado (procurado "] [" e "[]" no meu diretório conectado e analisei todas as ocorrências, mas não encontrei nada que definisse "] [" ou "[]").

Você conhece o plugin que eu costumava usar? Você conhece algum plug-in que ofereça essa funcionalidade?



3
[[e ]], são fornecidos pelo python ftplugin padrão.
Romainl 08/04

1
Graças @romainl para info, eu sei sobre [[, ]], (, ), {e }. [[e ]]são úteis em alguns casos, mas o meu principal problema é que eu preciso []e ][ou algo parecido, que fornece salta para final do próximo / anterior método / classe.
Sassan

1
@ muru obrigado, ]eresolve a maioria dos meus problemas, no entanto, alguns mapeamentos neste plugin parecem estar quebrados ]vou ]>tentarei corrigi-los em um fork e publicá-los. Embora eu ainda queira saber qual foi o plug-in que forneceu ][e []foi realmente útil.
Sassan

Respostas:


11

Com a atualização recente (novembro de 2017) dos $VIMRUNTIME/ftplugin/python.vimseguintes movimentos específicos de ft, agora estão disponíveis para a linguagem python

  • [[ Pule para trás para começar o nível superior atual / anterior
  • [] Pule para trás até o final do nível superior anterior
  • ][ Avança para o final do nível superior atual
  • ]] Avança para o início do próximo nível superior
  • [m Pule para trás para começar o método / escopo atual / anterior
  • [M Retroceda para o final do método / escopo anterior
  • ]M Avançar para o final do atual / próximo método / escopo
  • ]m Avance para o início do próximo método / escopo

Arquivo python de exemplo

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 atualização deve ser incluída se o nível do patch do vim for pelo menos 8.0.1256.

Se você não pode atualizar, mas deseja usar essa funcionalidade, pode instalar a versão mais recente no ~/.vimdiretório:

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

Plugin Pythonsense

Este plugin fornece movimentos semelhantes, mas ligeiramente modificados:

Os movimentos da "classe" do Vim 8.0 (" ]]", " [[" etc.), localizam blocos que começam na primeira coluna, independentemente de serem ou não blocos de classe ou função, enquanto seus movimentos de método / função (" [m", " ]m" etc.) localizam todos os blocos em qualquer recuo, independentemente de serem ou não blocos de classe ou função. Por outro lado, os movimentos de classe "Pythonsense" trabalham para encontrar todas e apenas as definições de classe, independentemente de seu nível de recuo, enquanto os movimentos de método / função trabalham para encontrar todas e apenas as definições de método / função, independentemente de seu nível de recuo.

Todos os detalhes e exemplos são fornecidos em https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .


Eu devo esperar até o neovim trazer esse patch.
Sassan

1
Eu acho que por enquanto você pode instalá-lo manualmente curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke 7/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.