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

Nik*_*ola 99 vi vim

说我有这行代码:

$query = "SELECT * FROM table";
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*ash 165

使用ci",表示:更改双引号内的内容.

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

  • ci' - 改变单引号内部
  • ciw - 改变一个词
  • ci( - 更改括号内
  • dit - 删除HTML标签内部等.

更多不同的vim的文本对象这里.

  • 并指向`:help motion.txt`以获得良好的衡量标准. (8认同)
  • 似乎只能在`vim`上使用,而不能在`vi`上使用。(不确定) (2认同)

Bri*_*new 22

您可以在引号之间进行选择,然后使用删除(d),更改(c)等

vi"
Run Code Online (Sandbox Code Playgroud)

同样,您可以替换大括号,括号,XML元素等,从而:

vi(
vi{
vit
Run Code Online (Sandbox Code Playgroud)

或简单地改变/删除,执行对应di",ci"等等代a用于i将包围周围元件(这样就标记或改变支架内容,例如)


Uli*_*aon 6

除了布莱恩的答案之外,您还可以p(粘贴)和y(猛拉)新值,因此如果您想将引号内的值替换为另一个值,您可以yi"在要复制的选择上执行操作,vi"以选择区域您想要替换的内容,然后p正确替换该值。


Ant*_*zov 5

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

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

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

  1. 前:foo '1, |2, 3' bar; 按下后diqfoo '|' bar
  2. 前:foo| '1, 2, 3' bar; 按下后diqfoo '|' bar
  3. 前:foo '1, 2, 3' |bar; 按下后diqfoo '|' bar
  4. 前:foo '1, |2, 3' bar; 按下后daqfoo | bar
  5. 前:foo| '1, 2, 3' bar; 按下后daqfoo | bar
  6. 前:foo '1, 2, 3' |bar; 按下后daqfoo | bar

上面的示例给出了单引号,该插件对双引号(“)和反引号(`)的使用方式完全相同。

您也可以使用任何其他运营商:ciqdiqyiqviq,等。

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