Python:使用 VIM 选择逻辑代码块

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问题的一般情况,例如这个。我最初的想法是悬赏解决该问题,但我实际上更愿意了解这种更普遍的情况,这将有助于处于该情况和其他情况下的用户。

答案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选择所有常见缩进的行以及“初始化”它的行

请注意,选择缩进级别后,您可以再次按iiai继续。例如,如果您在第 06 行并按vai,则将选择第 05-08 行。如果再次按ai,则会选择整个行__init__()(即第 03-19 行)。ai再次按 将选择整个类。

相关内容