在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样式的多行注释和预处理器指令。
有关更多信息,请参阅手册 。