用VIM在一个模式的结尾加上中间的一个词
我有一个文件已过期,需要更新。这些名字有些变化,我想用一个替代品把它们全部清理干净 以下是我试图实现的目标:用VIM在一个模式的结尾加上中间的一个词,vim,Vim,我有一个文件已过期,需要更新。这些名字有些变化,我想用一个替代品把它们全部清理干净 以下是我试图实现的目标: foo.foo_[single word] -> foo_bar.foo_[single word]_bar 其中,单个单词是由n个字符组成的字符串。在文件中,它们的前面总是有下划线,但需要附加“\u bar”。在这些实例之后总是有一个“.”,因此我认为以下方法可能有效: %s/foo\.foo_*\./foo_bar\.foo_*_bar\./g 遗憾的是,第一部分甚至与我想
foo.foo_[single word] -> foo_bar.foo_[single word]_bar
其中,单个单词是由n个字符组成的字符串。在文件中,它们的前面总是有下划线,但需要附加“\u bar”。在这些实例之后总是有一个“.”,因此我认为以下方法可能有效:
%s/foo\.foo_*\./foo_bar\.foo_*_bar\./g
遗憾的是,第一部分甚至与我想要的不匹配,所以我回到了第一步。我首先要改变:
foo_[word] -> foo_[word]_bar
然后
foo. -> foo_bar.
i、 e:
我首先要改变:
foo_[word] -> foo_[word]_bar
然后
foo. -> foo_bar.
i、 e:
给猫剥皮的方法有很多,但下面的方法就可以了
%s/\vfoo.foo_(\w+)/foo_bar.foo_\1_bar/gc
大致翻译成什么
\v Very Magic (:help magic)
foo.foo_ Search for exact string
(\w+) Search for a "word" and store in a backreference
/foo_bar.foo Replace search pattern with this exact string
\1 appended with backreference 1
_bar appended with _bar
或者,如果您不想在替换零件中重复搜索,您可以使用反向引用和
%s/\v(foo)\.foo_(\w+)/\1_bar.\1_\2_bar/gc
你错过的最重要的部分是
- 使用backreference(:helpgrep backref)
- 使用字符类(:h\w)
- 使用重复(*正在搜索0个或更多下划线。您可能是指*)
%s/\vfoo.foo_(\w+)/foo_bar.foo_\1_bar/gc
大致翻译成什么
\v Very Magic (:help magic)
foo.foo_ Search for exact string
(\w+) Search for a "word" and store in a backreference
/foo_bar.foo Replace search pattern with this exact string
\1 appended with backreference 1
_bar appended with _bar
或者,如果您不想在替换零件中重复搜索,您可以使用反向引用和
%s/\v(foo)\.foo_(\w+)/\1_bar.\1_\2_bar/gc
你错过的最重要的部分是
- 使用backreference(:helpgrep backref)
- 使用字符类(:h\w)
- 使用重复(*正在搜索0个或更多下划线。您可能是指*)