在 Vim 中替换字符串周围的引号?

发布于 2024-08-19 03:17:36 字数 300 浏览 6 评论 0原文

我有类似于 的内容,需要将单引号更改为双引号。我尝试了 :s/\'.*\'/\"\0\" 但最终产生了 >。将 \0 替换为 \1 只会在双引号内产生一个空白字符串 - 是否缺少一些特殊语法,我只需要生成找到的字符串( "Hello There") 内的引号分配给 \1

I have something akin to <Foobar Name='Hello There'/> and need to change the single quotation marks to double quotation marks. I tried :s/\'.*\'/\"\0\" but it ended up producing <Foobar Name="'Hello There'"/>. Replacing the \0 with \1 only produced a blank string inside the double quotes - is there some special syntax I'm missing that I need to make only the found string ("Hello There") inside the quotation marks assign to \1?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

睡美人的小仙女 2024-08-26 03:17:37

除非我遗漏了一些东西,否则 s/\'/"/g 不起作用吗?

unless i'm missing something, wouldn't s/\'/"/g work?

牵强ㄟ 2024-08-26 03:17:37

仅供参考 - 将所有双引号替换为单引号,这是正确的正则表达式 - 基于上面 rayd09 的示例

:%s/"\([^"]*\)"/'\1'/g

Just an FYI - to replace all double quotes with single, this is the correct regexp - based on rayd09's example above

:%s/"\([^"]*\)"/'\1'/g
计㈡愣 2024-08-26 03:17:37

您需要将要捕获的表达式部分放在圆括号内。

s/\'\(.*\)\'/"\1"/

但是,您可能会遇到无意匹配的问题。您是否可以简单地将文件中的任何单引号替换为双引号?

You need to put round brackets around the part of the expression you wish to capture.

s/\'\(.*\)\'/"\1"/

But, you might have problems with unintentional matching. Might you be able to simply replace any single quotes with double quotes in your file?

计㈡愣 2024-08-26 03:17:37

您的想法是正确的 - 您希望将 "\1" 作为替换子句,但您需要首先将“Hello There”部分放入捕获组 1 中(0 是整个捕获组)匹配)。尝试:

:%/'\(.*\)'/"\1"

You've got the right idea -- you want to have "\1" as your replace clause, but you need to put the "Hello There" part in capture group 1 first (0 is the entire match). Try:

:%/'\(.*\)'/"\1"

指尖上的星空 2024-08-26 03:17:37

Shift + V 进入视觉块模式。突出显示要从中删除单引号的代码行。

然后按键盘上的 :

然后输入

s/'//g

按 Enter。

完毕。你赢了。

Shift + V to enter visual block mode. Highlight the lines of code you want to remove single quotes from.

Then hit : on keyboard

Then type

s/'//g

Press Enter.

Done. You win.

樱花坊 2024-08-26 03:17:37

假设您想对整个文件执行此操作...

N 模式:

ggvG$ [SHIFT+:]  

X 模式:

'<,'>/'/" [RET]

Presuming you want to do this on an entire file ...

N Mode:

ggvG$ [SHIFT+:]  

X Mode:

'<,'>/'/" [RET]
痞味浪人 2024-08-26 03:17:36

如果你想公平地做到这一点,还有 surround.vim经常。您可以使用 cs'" 更改周围的引号。

There's also surround.vim, if you're looking to do this fairly often. You'd use cs'" to change surrounding quotes.

怎樣才叫好 2024-08-26 03:17:36

您需要使用分组:

:s/\'\(.*\)\'/\"\1\"

这样参数 1(即 \1)将对应于由 \( 和 \) 分隔的任何内容。

You need to use groupings:

:s/\'\(.*\)\'/\"\1\"

This way argument 1 (ie, \1) will correspond to whatever is delimited by \( and \).

乖乖 2024-08-26 03:17:36

%s/'\([^']*\)'/"\1"/g

您需要使用 [^']* 而不是 .* 否则

'apples' are 'red' 将转换为 "apples' are 'red"

%s/'\([^']*\)'/"\1"/g

You will want to use [^']* instead of .* otherwise

'apples' are 'red' would get converted to "apples' are 'red"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文