在Vim中更换
如何在替换内部进行替换 我知道您可以将光标下的当前单词放入replace,但我想在将其作为输出之前对其执行replace 例如:在Vim中更换,vim,replace,Vim,Replace,如何在替换内部进行替换 我知道您可以将光标下的当前单词放入replace,但我想在将其作为输出之前对其执行replace 例如: 有一份已经通过的文件,并替换您知道的受影响更严重的单词,例如去制度化(提示:美利坚合众国宪法)。该文件还包含一些已正确替换的单词 在整个文档中,将Wooloomoolo中的o更改为0(仅适用于该词) 一个真实世界的例子(来自我的vim历史)正在Latex文档中运行 %s/\\begin{table}\[h\]/\\begin{table}\[H\]/c 在这里,
- 有一份已经通过的文件,并替换您知道的受影响更严重的单词,例如去制度化(提示:美利坚合众国宪法)。该文件还包含一些已正确替换的单词
- 在整个文档中,将Wooloomoolo中的
更改为o
(仅适用于该词)0
%s/\\begin{table}\[h\]/\\begin{table}\[H\]/c
在这里,我复制字符串只是为了得到一个小的更改。将o替换为0很简单:
:s/o/0/g
也许您想知道如何将其应用于(视觉)选择
:s/\%Vo/0/g
编辑您想要的内容(参见评论)
:%s/\\ze/\=替换(子匹配(0),'o','0','g')/g
它的作用是:
匹配仅由[Wolm]\+
,W
,o
,l
m
匹配相同的(独立)单词(因此,Wooloomoolo或\
,mooW
将全部匹配,但不匹配Wlomo
等)李>amool
标记替换匹配的开始,\zs
标记替换匹配的结束\ze
替换匹配(在\=替换(子匹配(0),'o','0','g')
和\zs
之间),但替换\ze
为0
o
- 用实际目标替换
[Wolm]\+
- 在
之外添加可选上下文,以便减少匹配\zs…\ze
- 在模式前面添加
,以启用不区分大小写的匹配\c
:sub
命令时,尝试键入Ctrl-f。这将打开命令行窗口,并允许您使用vim的正常模式编辑命令。如果在此模式下按Enter键,将执行当前行。如果按Ctrl-c键,将返回到命令行模式,当前行作为当前文本
当您意外地键入q:
时,也会出现命令行窗口。(我知道我在理解它的用途之前做了很多。它也有您以前的命令的历史记录。在/
搜索或键入q/
时也尝试相同的方法。)
另请参见
:help cmdline window
更新的问题以进行澄清。您的建议将替换所有o
s或仅替换一个实例(除非我弄错了)好的,那么%s/wooloomoolo/w00l00l00/g
。@Portablejim:我想我想出了很好的提示让你现在就开始,请看更新的答案+分解说明+提示。看看:)没有我希望的那么短/简单,但仍然是一种方法。遇到“具有命令历史记录的命令行窗口”可能也会有所帮助。
:%s/\<\zs[Wolm]\+\>\ze/\=substitute(submatch(0), 'o', '0', 'g')/g