假设我有以下一行代码:
$query = "SELECT * FROM table";
在vi/vim中是否有一个命令可以立即删除引号之间的所有内容并将光标定位在它们之间,以便我可以开始输入?
使用ci"
,表示:更改双引号内的内容。
您还可以通过类似的方式操纵其他文本对象,例如:
ci'
- 更改单引号内的内容ciw
- 更改单词内部的内容ci(
- 更改圆括号内的内容dit
- 删除HTML标签中的内容等更多有关不同vim文本对象的信息请在此处查看。
您可以使用以下方法在引号之间进行选择,然后删除(d
),更改(c
)等操作。
vi"
同样的,您可以这样替换大括号、方括号、XML元素等:
vi(
vi{
vit
如果要进行简单的更改或删除,可以通过对应的di"
、ci"
等方式来实现。将i
替换为a
,则会涵盖周围的元素(例如,您可以同时标记或更改括号和内容)。
p
(粘贴)和y
(复制)新值。因此,如果您想用另一个值替换引号内的值,您可以在要复制的选择上执行yi"
,然后使用vi"
选择要替换的区域,最后只需执行p
即可正确地替换该值。yi"
对于复制引号之间的文本非常有用。 - ipatchvim-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
等。从引号内部,您可以执行以下操作
di"
将其读作删除 "
所选答案仅适用于ViM,而不适用于vi。问题也不准确,因为作者没有提及光标的初始位置。如果我们假设光标在双引号内,则对于vi,答案将是:
T"ct"
位置说明:
T" - 移动到 " 字符后面
c - 修改命令
t" - 为 c 命令提供结束位置,在此位置停止擦除字符,换句话说,是要更改的范围。
vim
中工作,而不能在vi
中工作。(不确定) - Ivan ChauF"ci"
。 - Eugene Yarmash