How to replace text between quotes in vi
说我有这行代码:
1
| $query ="SELECT * FROM table"; |
在vi / vim中是否有一个命令可以立即删除引号之间的所有内容并将光标放在它们之间以便我可以开始输入?
使用ci",表示:更改双引号内的内容。
您也可以以类似的方式操纵其他文本对象,例如:
-
ci' - 更改单引号内部
-
ciw - 改变单词内部
-
ci( - 更改括号内
-
dit - 在HTML标记内删除等。
这里有关于不同vim文本对象的更多信息
-
并指向:help motion.txt的指针以获得良好的衡量标准。
-
似乎只使用vim,但不是vi。 (不确定)
-
对我来说,这仅适用于当前行,而不适用于文档中的任何位置。
-
什么命令会向后做这个? 也就是说,如果要替换光标后面的引号内的文本。
-
@dtburgess:一种方法是F"ci"。
-
ci'和ci"工作正常,但ci(对我不起作用。任何想法为什么?
-
@Vram Vardanian ci(有一个同义词cib,也许它会起作用
您可以在引号之间进行选择,然后使用删除(d),更改(c)等
同样,您可以替换大括号,括号,XML元素等,从而:
或者只是更改/删除,执行相应的di",ci"等。将a替换为i将包含周围的元素(例如,标记或更改括号和内容)
我做了一个插件vim-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后
上面的例子是针对单引号给出的,插件对double(")和back(`)引用的工作方式完全相同。
您还可以使用任何其他运算符:ciq,diq,yiq,viq等。
请查看上面链接的github页面以获取更多详细信息。
从你已经在引号内可以做到
把它读作删除内"
-
游标不需要在双引号字符串中,因为该命令默认更改行中的第一个这样的字符串
-
谢谢,非常高兴知道! 只是去表明我应该仔细阅读一下。:)
除了Brian的答案,你还可以p(粘贴)和y(猛拉)新值,所以如果你想用另一个值替换引号内的值,你可以在选择上做yi"要复制,vi"选择要替换的区域,然后只需p即可正确替换该值。