Answers:
该%命令跳转到光标所在项目的匹配项。将光标放在开始(或关闭)括号上,并y%用于拉动或d%删除光标到匹配的括号中的所有内容。
这是有效的,因为%它是“运动命令”,因此可以在vim希望使用该命令的任何地方使用。来自:help y:
["x]y{motion} Yank {motion} text [into register x]. When no
characters are to be yanked (e.g., "y0" in column 1),
this is an error when 'cpoptions' includes the 'E'
flag.
默认情况下,“项目”包括方括号,花括号,括号,C风格的注释和各种预编译器语句(#ifdef,等等)。
您可以在Vim主页上找到用于“扩展%匹配”的插件。
%通过:help various-motions在命令模式下输入,可以阅读有关运动命令和相关运动命令的文档。
您可以在可视模式下使用另一组运动命令来选择各种文本对象。
要解决您的特定问题,您可以执行以下操作:
printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
^
假设您的光标位于^。输入以下顺序以选择您要寻找的零件:
v2a)
首先v进入可视模式,然后指定要提高2parens级别。最后,a)选择“块”。之后,您可以使用d或x删除等。
如果您不想包含外部括号,则可以使用“内部块”代替:
v2i)
请参阅:help object-select以获取相关命令的完整列表。
a意思是“周围”而不是“ a”。感觉像是对“内在”的更好补充。似乎没有一天不去学习有关Vim的新知识。
要删除一对括号内的所有内容,您可以始终发布di(及其衍生物。
注意 :
就像@porglezomb在他的评论中建议的那样,您可以使用a(“连同”)代替i(“内部”)来包含括号。因此,使用da(删除里面的一切(和)包括(和)。
删除紧邻的右括号内的文本:
因此,对于这一行代码
printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
^ ^
| |
\_______\___---> Cursor range
假设您的光标在上述光标范围内,则可以发出以下命令:
di( --> Deletes '5.0/9.0'
ci( --> Substitutes '5.0/9.0'
yi( --> Yanks '5.0/9.0'
删除第n个外部括号对内的文本:
要获取第n个外部括号对中的所有内容,只需n在上述命令之前添加。因此,使用与上面相同的光标位置,
2di( --> Deletes '(5.0/9.0) * (fahr-32)'
2ci( --> Substitutes '(5.0/9.0) * (fahr-32)'
2yi( --> Yanks '(5.0/9.0) * (fahr-32)'
3di( --> Deletes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3ci( --> Substitutes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3yi( --> Yanks '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
a作为与之对应的注释i,因为这可能会帮助很多人。
%该问题,但是这需要更多时间,并且我认为,仅应将其用于更复杂的情况。删除特定范围内的内容正是针对该用例di的。
正如大卫·诺曼(David Norman)的回答,
v%y或v%d。来自http://vimdoc.sourceforge.net/htmldoc/vimindex.html的说明:
在普通模式下标记字符注释动作
-------------------------------------------------- ----------------------------
| v | v启动逐字可视模式
|%| %1在上找到下一个(卷曲/方括号)括号
这条线,去匹配,或者去
匹配的注释括号,或转到匹配
| d | [“ x] d {motion} 2删除Nmove文本[进入缓冲区x]
这意味着它将选择两个括号(%)之间(包括两个括号)的所有内容,同时以可视方式向您显示选择(v),然后拉动/复制y或删除/剪切d它。(到默认缓冲区。)
您可以使用粘贴p。
做出这个回答是“自学钓鱼”。