在Vim中select整个函数定义

我一直在尝试Vim进行任何文本编辑工作将近一周。 我想知道selectC函数定义的最快方法。

例如,如果我有这样的function:

void helloworlds( int num ) { int n; for ( n = 0; n < num; ++n ) { printf( "Hello World!\n" ); } } 

我怎样才能删除整个定义,包括函数名称?

在Vim中很常见,有很多方法!

请注意,前两个解决scheme取决于没有空行。

  • 如果光标位于函数名称的行上,请尝试d } 。 它会删除所有到下一个块(即你的function体)。

  • 在函数体内, d a p将删除'段落'。

  • 您可以使用d a }删除大括号。 (如果你喜欢这个语法,我推荐Tim Pope的fantastic.vim,它增加了更多的function和类似的感觉)。

  • 您也可以尝试使用正则expression式删除,直到下一个最左边的缩进大括号: d / ^ } Enter

  • ] ][ [移动到下一个/上一个第一列大括号(相当于使用/?与上面提到的正则expression式结合使用d运动,并获得相同的效果。这些操作符被重新定义为您所要查找的内容:从函数到函数。

如何删除整个块,包括头

如果你在标题/名称,或块前的行,应该做的伎俩。

如果你低于一个块,你也可以利用Vimsearch的方便的'偏移'function。 d ^ { - 1将在第一列开口大括号首次出现之前向后删除一行。 input这个命令有点棘手。 也许你可以制作一个<leader>快捷键。

插件

我在Vim中并没有做太多的C编程,但肯定有插件来帮助这样的事情。 在GitHub上尝试Vim脚本或镜像 。

要删除整个function,包括其定义,例如:

 function tick() { // ... } 
  • 移至具有函数名称的行。
  • 移动光标到左大括号, f{应该这样做,或简单的$
  • V%d (视线,移至匹配对,删除)

如果你的function如下所示:

 function tick() { // ... } 
  • 移至具有函数名称的行。
  • 按下J (将当前行连接到下一行,这也将把光标放在最后一行的最后一个字符{ ,就是我们下一个命令所需的那个)。
  • V%d (视线,移至匹配对,删除。)

要么

  • 移至具有函数名称的行。
  • V[Down]%d (视线,向下移动一行,移至匹配对,删除。)

使用这个简单的方法

  1.Go to the function definition 2.dd - delete function definition 3.d -start delete operation 4.shift+5(%) - delete the lines between { to } 

您可以使用这个快捷方式来删除函数,也可以删除大括号之间的行,即if-else语句之间的代码,while循环等。

在大括号开始/结束处按Shitf + v [ 将使您进入可视模式]。

然后按] +} ie ] + Shitf] – 如果你在开始大括号。

然后按[+ { ie [+ Shitf [ – 如果你在大括号。

然后DEL删除选中的行。

最简单最直接的方式如下(在函数内部任何地方工作):

 v enter visual mode { move to first brace in function (may have to press more than once) o exchange cursor from top to bottom of selection } extend selection to bottom of function d delete selected text 

完整的命令序列是v{o}d 。 请注意,您可以执行其他操作,除了删除相同的方式。 例如,要复制该函数,请使用y (yank)而不是d

如果你愿意安装插件vim-textobj-function会给你vif的可视selectInside Function和vaf for Visual select A Function。

daf将删除该函数,包含签名和函数体( {} )的行

由这个插件定义的文本对象更加具体,它们不依赖于函数体对一个连续的文本块进行标记,或者将其放置在行的第一个字符处。

缺点是你依赖于一个外部插件。

非可视方式:

 d/^}/e 

…通过search删除} ,包括删除。

(没有在上面的答案中提到),解决scheme是不完整的。

/e – search到匹配结束,所以包含括号,命令也适用于:

 y/^}/e 

另一种方法是去你的函数开始的行,并打: Vj% (或V%%如果你的风格把大括号在同一行)。 这将使您进入可视化行模式,百分比会将您带到匹配的大括号。 在第二个样式中,第一个%会将您带到您所选行上的左大括号,第二个大括号将与您所选的大括号相匹配。

也适用于括号,括号,C样式的多行注释和预处理器指令。

有关更多信息,请参阅手册 。