Vim。在斜杠之间的每个单词的末尾添加 *
Vim. Add * to the end of each word between slashes
我有文字:
alpha/beta/gamma
alpbeta/gamma
alpha/beta/gamma
This is an example. Test1,Test2,Test3
alpha/beta/gamma
This is an example.
Test1,Test2,Test3
我想在斜杠 (/) 之间的每个单词的末尾添加 *,但是 vim 根据我的模式没有找到任何内容...
我的命令:
:%s/\/(.*?)\//*/g
我想要的结果:
alpha/beta*/gamma
alpbeta/gamma
alpha/beta*/gamma
This is an example. Test1,Test2,Test3
alpha/beta*/gamma
This is an example.
Test1,Test2,Test3
Vim 使用自己的正则表达式方言,其中:
.*?
中的*?
没有意义,
- 分组括号必须用反斜杠转义,
- 以及与其他方言的各种其他差异……
就目前而言,您的模式将匹配:
- 一个斜杠,
\/
,
- 后跟一个左括号,
(
,
- 后跟 0 个或多个任意字符,
.*
,
- 后跟一个问号,
?
,
- 后跟右括号
)
,
- 后跟另一个斜杠,
\/
,
在您的示例中无处可寻。
见:help perl-patterns
。
您可以使用
:%s/\/[[:alpha:]]\+\ze\//&*/g
甚至
:%s/\/[^\/]*\ze\//&*/g
这里的模式是\/[[:alpha:]]\+\ze\/
:
\/[[:alpha:]]\+
- 消耗部分:/
然后是一个或多个字母
[^\/]*
- /
以外的零个或多个字符
\ze\/
- 消耗的文本结束,然后必须跟随一个 /
字符(就好像它是常见 NFA 正则表达式中的 (?=\/)
正向先行)。
替换为 &
,代表整个匹配值和 *
个字符。
g
标志替换所有匹配项。
根据您的示例,您似乎希望在行中最后一次出现 /
之前添加 *
。
我会去录制一个执行 $F/i*^VESCj
的宏(其中 ^V
是 CTRL+V 而 ESC
是 ESC.
这意味着转到行尾,向后找到/
,进入插入模式,键入*
,返回正常模式,下一行。
您可以将其录制为宏并使用 :%normal @x
之类的内容在整个文件中播放(如果您在 x
上录制)
我有文字:
alpha/beta/gamma
alpbeta/gamma
alpha/beta/gamma
This is an example. Test1,Test2,Test3
alpha/beta/gamma
This is an example.
Test1,Test2,Test3
我想在斜杠 (/) 之间的每个单词的末尾添加 *,但是 vim 根据我的模式没有找到任何内容...
我的命令:
:%s/\/(.*?)\//*/g
我想要的结果:
alpha/beta*/gamma
alpbeta/gamma
alpha/beta*/gamma
This is an example. Test1,Test2,Test3
alpha/beta*/gamma
This is an example.
Test1,Test2,Test3
Vim 使用自己的正则表达式方言,其中:
.*?
中的*?
没有意义,- 分组括号必须用反斜杠转义,
- 以及与其他方言的各种其他差异……
就目前而言,您的模式将匹配:
- 一个斜杠,
\/
, - 后跟一个左括号,
(
, - 后跟 0 个或多个任意字符,
.*
, - 后跟一个问号,
?
, - 后跟右括号
)
, - 后跟另一个斜杠,
\/
,
在您的示例中无处可寻。
见:help perl-patterns
。
您可以使用
:%s/\/[[:alpha:]]\+\ze\//&*/g
甚至
:%s/\/[^\/]*\ze\//&*/g
这里的模式是\/[[:alpha:]]\+\ze\/
:
\/[[:alpha:]]\+
- 消耗部分:/
然后是一个或多个字母[^\/]*
-/
以外的零个或多个字符
\ze\/
- 消耗的文本结束,然后必须跟随一个/
字符(就好像它是常见 NFA 正则表达式中的(?=\/)
正向先行)。
替换为 &
,代表整个匹配值和 *
个字符。
g
标志替换所有匹配项。
根据您的示例,您似乎希望在行中最后一次出现 /
之前添加 *
。
我会去录制一个执行 $F/i*^VESCj
的宏(其中 ^V
是 CTRL+V 而 ESC
是 ESC.
这意味着转到行尾,向后找到/
,进入插入模式,键入*
,返回正常模式,下一行。
您可以将其录制为宏并使用 :%normal @x
之类的内容在整个文件中播放(如果您在 x
上录制)