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質問の一般的なケースが含まれます。私の最初の傾向は、その質問に賞金をかけることでしたが、実際には、そのような状況や他の状況でユーザーを支援する、このより一般的なケースを知りたいと思います。
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
を押すと、クラス全体が選択されます。