Pythonブロックモーションの終了


13

pythonブロックの終了/開始に移動するモーションが必要です。また、前/次のメソッド/クラスの開始/終了に移動する別のモーションが必要です(すべての組み合わせ)。

私はvim-indent-object、python-mode、chapa、vim-python-objectなどを試しました。それらのどれもブロックの終わりをサポートせず、上記のモーションのすべての組み合わせをサポートしません。

私は私が提供したプラグインを持っていた時間に一度覚えて]][[][および[](検索「] [」および「[]」の動き、前/次のメソッド/クラスの/最後の初めのために、私は私のプラグインディレクトリにそれを見つけることができませんプラグインされたディレクトリですべての発生を分析しましたが、「] [」または「[]」を定義するものは見つかりませんでした。

使用したプラグインを知っていますか?この機能を提供するプラグインを知っていますか?



3
[[および]]は、デフォルトのpython ftpluginによって提供されます。
ロメイン

1
詳細について@romainlおかげで、私が知っている[[]](){}[[そして]]いくつかのケースでは有用であるが、私の主な問題は、私は必要である[]][、前/次のメソッド/クラスの最後にジャンプしている提供し、またはそのような何か。
サッサン

1
@muruおかげで、]e私の問題のほとんどは解決しますが、このプラグインの一部のマッピングは壊れているように見える]v]>、フォークで修正して公開しようとします。私はまだ提供したことをプラグインだったのだろうけど][[]、それは本当に便利だったが。
サッサン

回答:


11

$VIMRUNTIME/ftplugin/python.vim次のft固有のモーションの最近の更新(2017年11月)で、Python言語で使用できるようになりました

  • [[ 後方にジャンプして現在/前のトップレベルを開始します
  • [] 前のトップレベルの最後に戻る
  • ][ 現在のトップレベルの終わりまで前方にジャンプします
  • ]] 次のトップレベルの開始に進む
  • [m 後方にジャンプして現在の/前のメソッド/スコープの開始
  • [M 前のメソッド/スコープの最後に戻る
  • ]M 現在の/次のメソッド/スコープの最後にジャンプします
  • ]m 次のメソッド/スコープの開始に進む

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

vimパッチレベルが少なくともである場合、このアップデートを含める必要があります8.0.1256

更新できないが、この機能を使用したい場合は、最新バージョンを~/.vimディレクトリにインストールできます。

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

プラグインPythonsense

このプラグインは同様のモーションを提供しますが、わずかに変更されています:

ストックVim 8.0の「クラス」モーション(「]]」、「[[」など)は、クラスまたは関数ブロックであるかどうかに関係なく、最初の列で始まるブロックを見つけますが、メソッド/関数モーション( " [m"、 「]m」など)は、これらがクラスまたは関数ブロックであるかどうかに関係なく、任意のインデントですべてのブロックを検索します。対照的に、「Pythonsense」クラスモーションは、インデントレベルに関係なく、すべての唯一のクラス定義の検索に機能し、メソッド/関数モーションは、インデントレベルに関係なく、すべてのメソッドおよび関数定義の検索に機能します。

詳細と例はすべてhttps://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motionsで提供されています


neovimがこのパッチをもたらすまで待つ必要があります。
サッサン

1
とりあえず手動でインストールできると思いますcurl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim
-Hotschke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.