如何在Vim中选择Python代码块?

22

我可以使用vi{va{来选择C++代码块。 当我需要复制/删除它们时,它对我很有帮助。

但是Python使用缩进来表示代码块。 我找不到更好的方法。 有什么想法吗?


4个回答

31

我还没有太多机会使用它,但是Michael Smith的vim-indent-object听起来可能接近您想要的。

示例用法(行号显示为set number处于活动状态):

  1 This is
  2   some text
  3     with multiple
  4   levels of
  5   indentation.
  6 There is also
  7     another stanza.

当光标在第2、4或5行时,输入“Vii”以选择第2到第5行。
当光标在第3行时,输入“Vai”以选择第2到第3行。
当光标在第3行时,输入“Vaiii”(或“Viiii”)以选择第2到第5行(在可视模式下,多次使用缩进对象会将选择扩展到上/外一级)。
它定义的文本对象是: - ai:当前缩进级别加上上一行 - 有用的时候,当你想获取介绍性语句时(例如抓取if及其"then"块) - ii:当前缩进级别 - aI:当前缩进级别加上上下各一行 - 对于使用“end”语句的语言非常有用: if/endif。 - iI:当前缩进级别(实际上, ii和iI是相同的)
这些对象还可以与其他期望文本对象的命令一起使用(即cii删除当前缩进级别并开始插入替换)。

当前缩进级别有空行时,它是否有效? - industryworker3595112
这个有效。我很喜欢它。非常感谢你。 - princebillyGK

8

我只需按 v 进入可视模式,然后再按 () 即可。这将带您到下一个空行。如果您的格式设置正确,那应该对应于您的代码块。


4
这样翻译是否正确? {} 表示段落,会移至下一个空行。 - mike3996
1
“()”是用于句子的符号。句子的定义为以“。”、“!”或“?”结尾,后面跟着行末或空格或制表符。 - Stefan van den Akker

3

对于Python,我通常使用“zM”来折叠整个文件,然后使用“2yy”复制整个函数。

如果您的函数在某个类中,可以使用“zc”而不是“zM”。

您需要将以下行添加到~/.vimrc中才能使zM/zc工作:

autocmd FileType python set foldmethod=indent

1
这其实非常聪明。救了我的一天! - lkahtz

1
你可以显示行号(:set nu),然后跳转到代码块开始的行号(:lineNumber),并将它们复制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接