我已经为Vim进行了近一周的文本编辑工作了。我想知道选择C函数定义的最快方法。
例如,如果我有这样的函数:
void helloworlds( int num )
{
int n;
for ( n = 0; n < num; ++n ) {
printf( "Hello World!\n" );
}
}
我怎样才能删除整个定义,包括函数名称?
在Vim中很常见,有很多方法!
请注意,前两个解决方案取决于缺少空行。
/
和?
和我上面提到的那个正则表达式。结合d运动,你实现相同的效果。像Python-mode这样的插件,这些operators are redefined准确地表示您正在寻找的东西:从功能到功能。如果你在标题/名称或块之前的行,da}应该这样做。
如果你在一个区块之下,你也可以使用Vim搜索的方便的“偏移”功能。 d?^ {? - 1将在第一次出现第一列开口大括号之前向后删除一行。键入此命令有点棘手。也许你可以制作一个<leader>
捷径。
我在Vim中没有做太多的C编程,但肯定有插件可以帮助解决这个问题。试试Vim Scripts或他们的mirror at GitHub。
前提条件:在函数内部。使用,转到第一行的上一个结束花括号
[]
然后使用删除到第一行的下一个结束花括号
d][
删除整个函数,包括其定义,例如:
function tick() {
// ...
}
f{
应该这样做,或者只是$
。V%d
(视线,移动到匹配对,删除)如果您的功能如下所示:
function tick()
{
// ...
}
J
(用线波纹管加入当前行。这也将光标放在结果行的最后一个字符{
上,这是我们下一个命令所需的那个字符。)V%d
(视线,移动到匹配对,删除。)要么
V[Down]%d
(视线,向下移动一行,移动到匹配对,删除。)您可以使用此快捷方式不仅删除函数,还删除大括号之间的行,即if-else语句之间的代码,while循环等。
在大括号开始/结束处按Shift + v [将以可视模式进入]。
然后按] +} i.t] + Shift] - 如果你在开始大括号。
然后按[+ {i.t [+ Shift [ - 如果你在结束括号中。
然后DEL删除选中的行。
使用这种简单的方法
1.Go to the function definition
2.dd - delete function definition
3.d -start delete operation
4.shift+5(%) - delete the lines between { to }
最简单,最直接的方式如下(在函数内的任何地方工作):
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
用于Visual选择Inside Function和vaf
for Visual选择A Function。
daf
将删除该功能,包括签名行和功能体({}
)
此插件定义的文本对象更具体,它们不依赖于函数体,将一个连续的文本块或{
beign放置在该行的第一个字符上。
缺点是你依赖外部插件。
如果您的函数由空行分隔,只需键入:
dip
这意味着“删除内部段落”。
非视觉方式:
d/^}/e
...通过在行beining搜索}
来删除,包括删除。
没有/e
(上面的答案中没有提到),解决方案是不完整的。
与/e
- 搜索结束比赛,所以包括右括号,并且命令也适合于yanking:
y/^}/e
另一种方法是转到函数开头的行并点击:Vj%
(如果你的样式将左大括号放在同一行上,则为V%%
)。这将使您进入Visual-Line模式,百分比将您带到匹配的右括号。在第二种样式中,第一个%将您带到您选择的线上的左大括号,第二个带到其匹配的右大括号。
也适用于括号,括号,C风格的多行注释和预处理器指令。
有关更多信息,请参阅manual。