如何使用 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问题的一般情况,例如这个。我最初的想法是悬赏解决该问题,但我实际上更愿意了解这种更普遍的情况,这将有助于处于该情况和其他情况下的用户。
答案1
看看vim 缩进对象插件,它根据缩进级别定义一个新的文本对象。它提供以下映射(取自文档):
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
再次按 将选择整个类。