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

时间:2012-07-24 12:02:12

标签: vim vi

说我有这行代码:

$query = "SELECT * FROM table";

vi / vim中是否有命令可以立即删除引号之间的所有内容并将光标放在它们之间以便我可以开始输入?

6 个答案:

答案 0 :(得分:156)

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

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

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

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

答案 1 :(得分:22)

您可以在引号之间进行选择,然后使用

删除(d),更改(c)等。
vi"

类似地,您可以替换大括号,括号,XML元素等:

vi(
vi{
vit

或者只是更改/删除,请执行相应的di"ci"等。将a替换为i将包含周围的元素(以便您标记或更改括号内容,例如)

答案 2 :(得分:5)

我制作了一个插件vim-textobj-quoteshttps://github.com/beloglazov/vim-textobj-quotes

它为最接近的任何类型的引号对提供文本对象,并支持跨越多行的引号。仅使用iqaq,它允许您操作当前围绕光标的单个('),双(")或后面(?)引号的内容,位于光标前面或后面(按优先顺序排列)。换句话说,当需要达到报价时,它会向前或向后跳跃。

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

  1. 之前:foo '1, |2, 3' bar;按diq后:foo '|' bar
  2. 之前:foo| '1, 2, 3' bar;按diq后:foo '|' bar
  3. 之前:foo '1, 2, 3' |bar;按diq后:foo '|' bar
  4. 之前:foo '1, |2, 3' bar;按daq后:foo | bar
  5. 之前:foo| '1, 2, 3' bar;按daq后:foo | bar
  6. 之前:foo '1, 2, 3' |bar;按daq后:foo | bar
  7. 上面的例子是针对单引号给出的,插件的工作方式与double(")和back(`)引用完全相同。

    您还可以使用任何其他运算符:ciqdiqyiqviq等。

    请查看上面链接的github页面了解更多详情。

答案 3 :(得分:3)

从引号内部你可以做到

di"

将其读作内容删除"

答案 4 :(得分:1)

除了Brian的回答之外,你还可以p(粘贴)和y(猛拉)新值,所以如果你想用其他值替换引号内的值,你可以做关于您要复制的选择的yi"vi"选择要替换的区域,然后只需p来正确替换该值。

答案 5 :(得分:0)

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

T"ct"

位置:

T”-在“字符”之后移回

c-更改命令

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