在 vim 中使用 & 符号时如何删除 space 间隙
How to remove space gap when using & symbol in vim
我想在所有以"w"结尾的单词的末尾添加"caps"。
例如 "jaw" 应该变成 "jawcaps",而 "blow" 应该变成 "blowcaps"
下面的命令是使用正则表达式来达到上面的要求。
:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
但是当我使用上面的命令时 "jaw" 转换为 "jaw caps" 而不是 "jawcaps"
如何删除位于 "jaw" 和 "caps" 之间的 space?
您的正则表达式有问题,您的正则表达式会匹配值 w
后的非字符。在您的情况下,匹配 jaw[one space]
而不是 jaw
:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
^^^ here match a space
我建议您使用捕获正则表达式。
:%s/\([A-Za-z][A-Za-z]*w\)\([^A-Za-z]\)/caps
更好的解决方案应该是使用 look behind。
:%s/\w\w*w\w\@!/&caps
这个怎么样:
:%s/w\>\zs/caps/g
Sato Katsura 的回答 :%s/w\>\zs/caps/g
是这样的:
搜索每个 "w" 字符是单词最后一个字符的位置:/w\>
.
但是不要匹配那个"w":只匹配"w"之后的零宽度space:/w\>\zs
(或者/w\zs\>
).
用单词 "caps" 替换匹配项:s/w\>\zs/caps/
.
在每一行上这样做:范围是 %
,并且在这些行上的每一次出现:标志是 g
.
放在一起::%s/w\>\zs/caps/g
。
- 匹配词结束
:h /\>
- 设置比赛开始
:h \zs
- 替换命令
:h :s
- 范围规范
:h :range
- 替换标志
:h :s_flags
我想在所有以"w"结尾的单词的末尾添加"caps"。 例如 "jaw" 应该变成 "jawcaps",而 "blow" 应该变成 "blowcaps"
下面的命令是使用正则表达式来达到上面的要求。
:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
但是当我使用上面的命令时 "jaw" 转换为 "jaw caps" 而不是 "jawcaps"
如何删除位于 "jaw" 和 "caps" 之间的 space?
您的正则表达式有问题,您的正则表达式会匹配值 w
后的非字符。在您的情况下,匹配 jaw[one space]
而不是 jaw
:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
^^^ here match a space
我建议您使用捕获正则表达式。
:%s/\([A-Za-z][A-Za-z]*w\)\([^A-Za-z]\)/caps
更好的解决方案应该是使用 look behind。
:%s/\w\w*w\w\@!/&caps
这个怎么样:
:%s/w\>\zs/caps/g
Sato Katsura 的回答 :%s/w\>\zs/caps/g
是这样的:
搜索每个 "w" 字符是单词最后一个字符的位置:
/w\>
.但是不要匹配那个"w":只匹配"w"之后的零宽度space:
/w\>\zs
(或者/w\zs\>
).用单词 "caps" 替换匹配项:
s/w\>\zs/caps/
.在每一行上这样做:范围是
%
,并且在这些行上的每一次出现:标志是g
.
放在一起::%s/w\>\zs/caps/g
。
- 匹配词结束
:h /\>
- 设置比赛开始
:h \zs
- 替换命令
:h :s
- 范围规范
:h :range
- 替换标志
:h :s_flags