web-dev-qa-db-ja.com

Python:VIM

VIMで論理的にインデントされたコードブロックを選択するにはどうすればよいですか?たとえば、Pythonの次のビットについて考えてみます。

01:class Foo(object):
02: 
03:    def __init__(self, bar):
04:
05:        if 'baz' in bar:
06:            print("I love baz!")
07:
08:            print("You made the best choice!")
09:
10:        Elif 'boo' in bar:
11:            print("I like boo!")
12:
13:        else:
14:            print("I like your choice!")
15:
16:        self.choice = bar
17:        self.someList = []
18:
19:        print("Foo sucessfully created!")
20:
21:
22:    def bim(self):
23:        print("Bam boo")
24:        return True

一般的なインデントのすべての行を選択するにはどうすればよいですか?つまり、私が06行目にいる場合、06-08行目(両端を含む)が選択されますか?または、16行目にいる場合は、05〜19行目を選択します。

共通のインデントのすべての行と、さらにそれを「初期化」する行を選択するにはどうすればよいですか?つまり、私が06行目にいる場合、05〜08行目(両端を含む)が選択されますか?または、16行目にいる場合は、03〜19行目を選択します。

上位レベルのインデントを選択に簡単に追加するにはどうすればよいですか?つまり、__init__メソッドを選択した場合、クラス全体を選択するように移行するにはどうすればよいですか?

この質問には、 これ など、他の多くの(多くの場合未回答の)VIM/Python質問の一般的なケースが含まれます。私の最初の傾向は、その質問に賞金をかけることでしたが、実際には、そのような状況や他の状況でユーザーを支援する、このより一般的なケースを知りたいと思います。

5
dotancohen

vim-indent-object プラグインを見てください。このプラグインは、インデントレベルに基づいて新しいテキストオブジェクトを定義します。次のマッピングを提供します(ドキュメントから取得)。

_    Key Mapping       Description

    <count>ai         (A)n (I)ndentation level and line above.
    <count>ii         (I)nner (I)ndentation level (no line above).
    <count>aI         (A)n (I)ndentation level and lines above/below.
    <count>iI         (I)nner (I)ndentation level (no lines above/below).
_

したがって:

  • viiを押して、共通のインデントのすべての行を選択します

  • vaiを押して、共通のインデントのすべての行を選択し、さらにそれを「初期化」する行を選択します

インデントレベルを選択した後、もう一度iiまたはaiを押すとさらに先に進むことができることに注意してください。たとえば、06行目でvaiを押すと、05〜08行目が選択されます。もう一度aiを押すと、__init__()全体が選択されます(つまり、03〜19行目)。もう一度aiを押すと、クラス全体が選択されます。

9
taketwo