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
进入可视模式,然后指定要提高2
parens级别。最后,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
。
做出这个回答是“自学钓鱼”。