如何在Vim中复制整个代码块?

26

在Vim中,是否可以复制整个Python代码块?

无论是 def, for, if 块还是其他块...


1
“可能应该发布在superuser.com上”,我不太确定… - Joachim Sauer
7
不要同意,这是关于在特定的开发过程(编写Python代码)中使用软件工具的问题,请参见http://meta.stackexchange.com/questions/12373/which-types-of-programming-related-questions-are-appropriate/12378#12378。 - Adam Bellaire
11个回答

32
您可以使用y}命令复制一个段落。但是,如果您有一个空行,则不会复制所有方法。

7
你可以使用Ctrl-v和y}来查看将要被yank的行。当你想覆盖一个块时,可以按下}。 - noomz

14

如果您想要除了左大括号 { 以外的所有内容,请使用 yi{ (或者 yi})。如果您想要包含花括号,请使用 ya{ (或者 ya})。

ia 修饰符分别表示“内部”和“全局”。

要复制单词,无论光标位于单词中的哪个位置,请使用 yiw

要复制括号内的内容,请使用 yi);如果想要包含括号,请使用 ya(

同样地,您可以使用 yi", ya", yi', ya' 来复制或包含双引号或单引号中的内容。

当然,这些操作不仅限于复制。您还可以使用 diw 删除单词,使用 ciw 更改单词等等。


5
非常适合C语言。不过我认为这个问题是针对Python的。 - jmhmccr
2
还有p命令可以复制当前段落(即上下由空行分隔的任何内容)。 yip命令可以复制整个段落,而yap命令可以复制整个段落+下一个空行。如果您的光标已经在要复制的段落内部,这将非常有用。 - Robert Rüger
这个特性在帮助文档中在哪里?我寻找了很长时间,没有找到相应的URL。使用 help: a 无法找到修改器。 - Andy

9
优秀的附加套件Python-mode包括一些按键命令,可以浏览类、方法和函数块。
  • 复制一个方法: yaM (内部方法: yiM)

  • 复制一个类: yaC

还有其他方便的动作,比如从一个函数移动到另一个函数(]])。查看完整的按键列表以获取更多信息。


4

有一个vim插件脚本python_fn.vim,其中之一的功能是使用]v键绑定来可视化选择Python代码块。然后可以像平常一样使用y复制它。


4

我通常只使用可视块模式。按下Shift-V,移动光标并选中块,然后使用'y'命令复制该块。毕竟我一次只能记住这么多快捷方式 :)


2
这也是我通常做的,我不认为这是最好的方式,但只需要一个脑细胞就可以轻松完成 :) - John La Rooy
视觉选择对于使用 > 和 < 缩进/取消缩进块也非常有用。 - John La Rooy

4
您可以将搜索与yank组合使用,因此,如果您的函数以return retval结尾,则可以键入y/return retval

2
  1. 按下'V'进入可视化行选择模式
  2. 当完成选择后,按'y'
  3. 使用'p'或'P'将其粘贴到其他位置

1
我制作了一个名为spacebox的插件,它可以对与当前行具有相同或更多缩进的所有行进行可视化选择。
由于Python中的空格是这样的,您可以将光标放在defif下面的行上,并发出命令:SpaceBox来选择您的“块”。

1

0

只需使用 za 折叠类,然后使用可视模式(V)选择折叠的类。这样您就不必滚动太多。然后使用 y 命令复制。完成复制后,再次使用 za 命令展开类。


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