【发布时间】:2012-07-22 17:54:12
【问题描述】:
假设我有这行代码:
$query = "SELECT * FROM table";
vi/vim 中是否有一个命令可以立即删除引号之间的所有内容并将光标定位在它们之间以便我可以开始输入?
【问题讨论】:
假设我有这行代码:
$query = "SELECT * FROM table";
vi/vim 中是否有一个命令可以立即删除引号之间的所有内容并将光标定位在它们之间以便我可以开始输入?
【问题讨论】:
使用ci",表示:更改双引号内的内容。
您也可以以类似的方式操作其他文本对象,例如:
ci' - 在单引号内更改ciw - 在一个词内改变 ci( - 括号内的变化dit - 在 HTML 标记内删除,等等。更多关于不同的vim文本对象here。
【讨论】:
vim,但不适用于vi。 (不确定)
F"ci"。
您可以在引号之间进行选择,然后删除 (d)、更改 (c) 等使用
vi"
同样,您可以替换大括号、方括号、XML 元素等:
vi(
vi{
vit
或简单地更改/删除,执行相应的di"、ci" 等。将a 替换为i 将包含周围的元素(因此您标记或更改括号和 内容,例如)
【讨论】:
我做了一个插件vim-textobj-quotes:https://github.com/beloglazov/vim-textobj-quotes
它为任何类型的最接近的引号对提供文本对象,并支持跨多行的引号。仅使用 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 页面了解更多详情。
【讨论】:
从已经在引号里面你可以做
di"
把它读作“里面的delete”
【讨论】:
除了 Brian 的回答,您还可以 p(paste) 和 y(yank) 新值,因此如果您想用另一个值替换引号内的值,您可以在 yi" 上执行要复制的选择,vi" 选择要替换的区域,然后只需 p 正确替换值。
【讨论】:
yi" 对于复制引号之间的文本很有用。
所选答案仅适用于 ViM,但不适用于 vi。这个问题也不准确,因为作者没有提到光标的初始位置是什么。如果我们假设光标在双引号内,那么 vi 的答案将是:
T"ct"
地点:
T" - 在 " 字符之后向后移动
c - 更改命令
t" - 为 c 命令提供结束位置,它应该停止擦除字符,换句话说就是要更改的范围
【讨论】: