Koniec ruchu bloku pytona

13

Potrzebuję ruchu, który przesuwa się do końca / początku bloku pytona, i potrzebuję innego ruchu, który przechodzi do początku / końca poprzedniej / następnej metody / klasy (wszystkie kombinacje).

Próbowałem vim-indent-object, python-mode, chapa, vim-python-object itp. Żadne z nich nie obsługuje końca bloku i żadne z nich nie obsługuje wszystkich kombinacji powyższych ruchów.

Pamiętam kiedyś miałem wtyczkę, która pod warunkiem ]], [[, ][a []ruchy na początek / koniec poprzedniej / następnej metody / klasy, ale nie mogę go znaleźć w moim katalogu zaślepionej (poszukiwanej „] [” i „[]” w moim podłączonym katalogu i przeanalizowałem wszystkie wystąpienia, ale nie znalazłem niczego, co definiuje „] [” lub „[]”).

Czy znasz wtyczkę, której używałem? Czy znasz jakieś wtyczki, które zapewniają tę funkcjonalność?

Sassan
źródło
3
[[i ]]są dostarczane przez domyślny ftplugin w Pythonie.
romainl
1
@romainl Dzięki za info, wiem o [[, ]], (, ), {i }. [[i ]]są przydatne w niektórych przypadkach, ale moim głównym problemem jest to, że potrzebuję []i ][coś w tym rodzaju, co zapewnia skoki do końca następnej / poprzedniej metody / klasy.
Sassan
1
@muru dzięki, to ]erozwiązuje większość moich problemów, jednak niektóre mapowania w tej wtyczce wydają się być uszkodzone ]vlub ]>spróbuję je naprawić w rozwidleniu i opublikować. Chociaż ja wciąż zastanawiam się, co było warunkiem że wtyczki ][i []było bardzo przydatne.
Sassan

Odpowiedzi:

11

Dzięki najnowszej aktualizacji (listopad 2017) $VIMRUNTIME/ftplugin/python.vimnastępujących ruchów specyficznych dla ft są teraz dostępne dla języka python

  • [[ Przeskocz do tyłu, aby rozpocząć bieżący / poprzedni poziom najwyższy
  • [] Przeskocz do tyłu na koniec poprzedniego najwyższego poziomu
  • ][ Przeskocz do przodu do końca bieżącego najwyższego poziomu
  • ]] Przejdź do przodu, aby rozpocząć następny poziom najwyższy
  • [m Przeskocz do tyłu, aby rozpocząć bieżącą / poprzednią metodę / zakres
  • [M Przejdź do końca poprzedniej metody / zakresu
  • ]M Przeskakuj do przodu do końca bieżącej / następnej metody / zakresu
  • ]m Przejdź do przodu, aby rozpocząć następną metodę / zakres

Przykładowy plik 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

Ta aktualizacja powinna zostać uwzględniona, jeśli poziom łatki vima wynosi co najmniej 8.0.1256.

Jeśli nie możesz zaktualizować, ale chcesz skorzystać z tej funkcji, możesz zainstalować najnowszą wersję w ~/.vimkatalogu:

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

Wtyczka Pythonsense

Ta wtyczka zapewnia podobne ruchy, ale nieznacznie zmodyfikowana:

Podstawowe ruchy „klasy” Vima 8.0 („ ]]”, „ [[” itd.) Znajdują bloki rozpoczynające się w pierwszej kolumnie, niezależnie od tego, czy są to bloki klas lub funkcji, a ich ruchy metod / funkcji („ [m”, „ ]m” itp.) znajdź wszystkie bloki przy dowolnym wcięciu, niezależnie od tego, czy są to bloki klasowe czy funkcyjne. Natomiast ruchy klas „Pythonsense” działają na znajdowaniu wszystkich i tylko definicji klas, niezależnie od ich poziomu wcięcia, natomiast ruchy metody / funkcji działają na znajdowaniu wszystkich i tylko definicji metod / funkcji, niezależnie od ich poziomu wcięcia.

Wszystkie szczegóły i przykłady podano na https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .

Hotschke
źródło
Powinienem poczekać, aż neovim przyniesie tę łatkę.
Sassan,
1
Chyba na razie możesz zainstalować go ręcznie curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke,