关于vim:如何在vi中的引号之间替换文本

How to replace text between quotes in vi

说我有这行代码:

1
$query ="SELECT * FROM table";

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


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

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

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

这里有关于不同vim文本对象的更多信息


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

1
vi"

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

1
2
3
vi(
vi{
vit

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


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

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

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

  • 之前:foo '1, |2, 3' bar;按diqfoo '|' bar
  • 之前:foo| '1, 2, 3' bar;按diqfoo '|' bar
  • 之前:foo '1, 2, 3' |bar;按diqfoo '|' bar
  • 之前:foo '1, |2, 3' bar;按daqfoo | bar
  • 之前:foo| '1, 2, 3' bar;按daqfoo | bar
  • 之前:foo '1, 2, 3' |bar;按daqfoo | bar
  • 上面的例子是针对单引号给出的,插件对double(")和back(`)引用的工作方式完全相同。

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

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


    从你已经在引号内可以做到

    1
    di"

    把它读作删除内"


    除了Brian的答案,你还可以p(粘贴)和y(猛拉)新值,所以如果你想用另一个值替换引号内的值,你可以在选择上做yi"要复制,vi"选择要替换的区域,然后只需p即可正确替换该值。