提问人:Rook 提问时间:6/30/2009 最后编辑:RandallRook 更新时间:1/6/2023 访问量:145497
如何在 Vim 中的括号(或引号或 ...)之间进行选择?
How to select between brackets (or quotes or ...) in Vim?
问:
我敢肯定曾经有一个插件可以用于这种东西,但现在我需要它,我似乎找不到它(自然),所以我只会问简单明了。
在括号、引号或一般匹配字符列表之间进行选择的最简单方法是什么?
write ( *, '(a)' ) 'Computed solution coefficients:'
例如,这里我想选择 ,或 。(a)
Computed solution coefficients:
我对多行不感兴趣,只对发生在一行上的情况感兴趣。
答:
使用要在括号内获取的任何导航键,然后可以使用其中任何一个或复制匹配参数中的所有内容。这也适用于方括号(例如)和大括号。除了 之外,您还可以删除或更改文本(例如 、 )。yi(
yi)
yi]
y
ci)
di]
我尝试过双引号和单引号,它似乎也在那里工作。对于您的数据,我这样做:
write (*, '(a)') 'Computed solution coefficients:'
将光标移动到 ,然后键入 。将光标移动到空行,点击 ,然后得到C
yi'
p
Computed solution coefficients:
正如 CMS 所指出的,这也适用于视觉模式选择 - 只需使用 、 、 等。vi)
vi}
vi'
评论
yi"
这种选择方法是内置的,在 Vim 帮助中得到了很好的介绍。它涵盖了 XML 标记等。
看。:help text-objects
评论
使用箭头或进入括号表达式之一,然后选择视觉(即选择)模式,然后跳转到另一个括号。hjkl
v
%
评论
使用内置函数在 .vimrc 中编写一个 Vim 函数:searchpair
searchpair({start}, {middle}, {end} [, {flags} [, {skip}
[, {stopline} [, {timeout}]]]])
Search for the match of a nested start-end pair. This can be
used to find the "endif" that matches an "if", while other
if/endif pairs in between are ignored.
[...]
(http://vimdoc.sourceforge.net/htmldoc/eval.html)
为了在单引号之间进行选择,我通常会做一个(“选择内部单引号”)。vi'
在括号块内,我使用(“选择内部块”)vib
在大括号块内,您可以使用(“大写 B”)viB
要使选择“包含”(同时选择引号、括号或大括号),您可以使用 代替 。a
i
您可以在手册上或在 vim 中阅读有关文本对象选择的更多信息。:help text-objects
评论
vi"
选择内双引号”
要选择单引号内,请使用 。vi'
要选择括号内的选择,请使用 。vi(
评论
ci'
ci(
%vi(
%vib
vim 中的一个简单的键盘映射可以解决这个问题。 地图 viq F“lvf”hh 上面的命令将 viq 映射到在引号之间搜索的键。将 “ 替换为任意字符并创建键盘映射。 在启动过程中将其粘贴在 vimrc 中,您应该每次都能使用它。
我做了一个插件:https://github.com/beloglazov/vim-textobj-quotesvim-textobj-quotes
它为任何类型的最接近的引号对提供文本对象。仅使用 or 允许您对当前围绕游标的单引号 (')、双引号 (“) 或后引号的内容进行操作,这些引号位于游标的前面或后面(按优先顺序)。换句话说,当需要到达报价时,它会向前或向后跳跃。iq
aq
通过查看示例更容易理解(光标显示为):|
- 以前:;按下后:
foo '1, |2, 3' bar
diq
foo '|' bar
- 以前:;按下后:
foo| '1, 2, 3' bar
diq
foo '|' bar
- 以前:;按下后:
foo '1, 2, 3' |bar
diq
foo '|' bar
- 以前:;按下后:
foo '1, |2, 3' bar
daq
foo | bar
- 以前:;按下后:
foo| '1, 2, 3' bar
daq
foo | bar
- 以前:;按下后:
foo '1, 2, 3' |bar
daq
foo | bar
上面的示例是针对单引号给出的,该插件的工作方式与双引号(“)和反引号(')完全相同。
您还可以使用任何其他运算符:、等。ciq
diq
yiq
viq
请查看上面链接的 github 页面了解更多详情。
我会在得票最多的答案中添加一个细节:
如果您使用的是 gvim 并想要复制到剪贴板,请使用
"+<command>
复制括号(或括号或大括号)之间的所有内容
例如:将光标所在的大括号之间的所有内容复制到剪贴板。"+yi}
评论
y
我想补充已经很好的答案。我来这里是为了寻找一种更改 html 括号内文本的方法,所以我想为其他也在寻找它的人提供一个答案。
您可能认为会起作用,但实际上,这仅在您位于其中一个标签本身中时才有效:ci<
<would work inside here> But not here </would work inside here>
我想要的是更改html标签本身之间的文本:
<div>change me</div>
我想要的是“更改内部标签”:cit
感谢您提到文档()的另一个答案,这就是我找到我想要的东西的方式。:help text-objects
停在括号的开头,并全选并打印
vi'
vi(
vi[
vi{
vi<
vi"
如果要删除,请替换为vi
di
评论