如何使用Vim选择Python代码块?

22 投票
4 回答
7164 浏览
提问于 2025-04-17 09:18

我可以用 vi{va{ 来选择 C++ 的代码块。这对我很有帮助,特别是在我需要复制或删除这些代码块的时候。

但是 Python 是通过缩进来表示代码块的。我找不到更好的方法来处理这个。有没有什么建议?

4 个回答

4

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

如果你的函数是在某个类里面,你可以用“zc”来代替“zM”。

你需要在~/.vimrc文件中添加以下一行,才能让zM/zc正常工作:

autocmd FileType python set foldmethod=indent
8

我只需按一下 v 进入可视模式,然后按 ()。这样就会跳到下一个空行。如果你的代码格式整理得不错,这个空行应该对应着你的代码块。

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:当前缩进级别(实际上,iiiI是一样的)。

这些对象也可以和其他需要文本对象的命令一起使用(比如cii可以删除当前缩进级别并开始插入替代内容)。

撰写回答