Vim 如何在vi中替换引号之间的文本

Vim 如何在vi中替换引号之间的文本,vim,vi,Vim,Vi,假设我有这行代码: $query = "SELECT * FROM table"; vi/vim中是否有一个命令可以立即删除引号之间的所有内容,并将光标放在引号之间,以便我可以开始键入?使用ci“,这意味着:更改双引号内的内容 您还可以以类似的方式操纵其他文本对象,例如: ci'-单引号内的更改 ciw-在单词内部进行更改 ci(-更改括号内的内容 dit-删除HTML标记内的内容等 更多关于不同vim文本对象的信息。在引号内,您可以执行以下操作 di" 在“中读为delete,您可以在

假设我有这行代码:

$query = "SELECT * FROM table";
vi/vim中是否有一个命令可以立即删除引号之间的所有内容,并将光标放在引号之间,以便我可以开始键入?

使用
ci“
,这意味着:更改双引号内的内容

您还可以以类似的方式操纵其他文本对象,例如:

  • ci'
    -单引号内的更改
  • ciw
    -在单词内部进行更改
  • ci(
    -更改括号内的内容
  • dit
    -删除HTML标记内的内容等

更多关于不同vim文本对象的信息。

在引号内,您可以执行以下操作

di"

在“

中读为delete,您可以在引号之间选择,然后使用删除(
d
)、更改(
c
)等

vi"
同样,您可以替换大括号、方括号、XML元素等。因此:

vi(
vi{
vit

或者简单地更改/删除,执行相应的
di“
ci”
等。用
a
替换
i
将包含周围的元素(例如,您可以标记或更改括号和内容)

我制作了一个插件
vim textobj quotes

它为任何类型的最接近的引号对提供文本对象,并支持跨多行的引号。仅使用
iq
aq
它允许您对当前围绕光标的单(')、双(“)或后(`)引号的内容进行操作,这些引号位于光标前面或后面(按照优先顺序)。换句话说,当需要到达引号时,它向前或向后跳跃

通过查看示例更容易理解(光标显示为
|
):

  • 前:
    foo'1、| 2、3'条
    ;按
    diq
    后:
    foo'条
  • 前:
    foo |'1,2,3'条形图
    ;按
    diq
    后:
    foo |'条形图
  • 前:
    foo'1,2,3'| bar
    ;按
    diq
    后:
    foo'| bar
  • 前:
    foo'1、| 2、3'条
    ;按
    daq
    后:
    foo'bar
  • 前:
    foo |'1,2,3'条形图
    ;按
    daq
    后:
    foo |条形图
  • 前:
    foo'1,2,3'| bar
    ;按
    daq
    后:
    foo'bar
  • 上面的例子是针对单引号的,插件的工作方式与双引号(“)和反引号(`)完全相同

    您还可以使用任何其他操作员:
    ciq
    diq
    yiq
    viq


    请查看上面链接的github页面以了解更多详细信息。

    除了Brian的答案之外,您还可以
    p
    (粘贴)和
    y
    (yank)新值,因此如果您想用另一个值替换引号内的值,您可以对要复制的选择执行
    yi”
    选择要替换的区域,然后只
    p
    正确替换值。

    选择的答案仅适用于ViM,而不适用于vi。问题也不准确,因为作者没有提到光标的初始位置。如果我们假设光标位于双引号内,则对于vi,答案将是:

    T"ct"
    
    其中:

    T“-在“字符”后面向后移动

    c-更改命令


    t“-为c命令提供结束位置,在该位置它应该停止擦除字符,换句话说,要更改的范围

    光标不需要位于双引号字符串内,因为命令默认为更改行中的第一个这样的字符串。谢谢,这很好!这表明我应该更仔细地阅读内容。:)似乎只使用
    vim
    ,但不使用
    vi
    (不确定)对我来说,这只在当前行上有效,而不在文档中的任何位置。然后什么命令会向后执行此操作?这是如果您想替换光标后面引号内的文本。@dtburges:一种方法是
    F“ci”
    。ci'和ci“工作正常,但ci”(对我不起作用。有人知道为什么吗?