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

Posted

技术标签:

【中文标题】如何在vi中替换引号之间的文本【英文标题】:How to replace text between quotes in vi 【发布时间】:2012-07-22 17:54:12 【问题描述】:

假设我有这行代码:

$query = "SELECT * FROM table";

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

【问题讨论】:

【参考方案1】:

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

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

ci' - 在单引号内更改 ciw - 在一个词内改变 ci( - 括号内的变化 dit - 在 html 标记内删除,等等。

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

【讨论】:

似乎只适用于vim,但不适用于vi。 (不确定) 对我来说,这只适用于当前行,不适用于文档中的任何位置。 那么什么命令会向后执行呢?也就是说,如果您想替换光标后面引号内的文本。 @dtburgess:一种方法是F"ci" ci' and ci" 工作正常,但 ci( 对我不起作用。有人知道为什么吗?【参考方案2】:

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

vi"

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

vi(
vi
vit

或简单地更改/删除,执行相应的di"ci" 等。将a 替换为i 将包含周围的元素(因此您标记或更改括号 内容,例如)

【讨论】:

【参考方案3】:

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

它为任何类型的最接近的引号对提供文本对象,并支持跨多行的引号。仅使用 iqaq 它允许您对当前围绕光标、位于光标前面或位于 (按优先顺序)。换句话说,它会在需要到达引号时向前或向后跳转。

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

    之前: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

上面的例子是针对单引号给出的,插件对双引号(")和反引号(`)的工作方式完全相同。

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

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

【讨论】:

【参考方案4】:

从已经在引号里面你可以做

di"

把它读作“里面的delete”

【讨论】:

光标不需要在双引号字符串内,因为命令默认更改行中的第一个这样的字符串 谢谢,很高兴知道!只是表明我应该更仔细地阅读一些东西。 :)【参考方案5】:

除了 Brian 的回答,您还可以 p(paste) 和 y(yank) 新值,因此如果您想用另一个值替换引号内的值,您可以在 yi" 上执行要复制的选择,vi" 选择要替换的区域,然后只需 p 正确替换值。

【讨论】:

谢谢。 yi" 对于复制引号之间的文本很有用。【参考方案6】:

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

T"ct"

地点:

T" - 在 " 字符之后向后移动

c - 更改命令

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

【讨论】:

以上是关于如何在vi中替换引号之间的文本的主要内容,如果未能解决你的问题,请参考以下文章

RegEx - 在引号之间查找文本并在括号之间替换

如何使用powershell将文本($)替换为文本文件中的引号

1. vi 与 vim 有什么区别呢,它们之间有什么关系?

如何在 DataGrip 中的现有文本周围添加引号?

如何仅替换不在 c# 中的两个引号之间的字符串

sql 查询的结果如何加上单引号。