Answers:
干得好:
:g/foo/t.|s//bar
分解:
:g/foo/ " start a global command applied on all lines matching 'foo'
t. " duplicate the current line (the cursor is now on the new line)
| " chain a new command
s//bar " substitute the last searched element with 'bar'
由于该g
命令将更新搜索模式,因此您可以在替换命令中省略要替换的模式。(参考::h :g
,搜索search pattern
)。
旧版本:
:g/foo/norm! yyp:s/foo/bar^M
分解:
:g start a global command
/foo/ apply only on lines having 'foo'
norm! execute a normal command
yyp duplicate the line
:s//bar replace foo with bar on the line (the duplicated one)
^M add enter to execute the substitution
要插入^M
印刷机Ctrl+v和enter。
注意:在了解该t
命令之前,我最初想出的是“旧”版本。我将保留它,但我不建议您使用它。第一个是更简洁明了的。
foo
....
^M
按照我的解释进入了吗?
t
,然后添加了第二个版本。我会改变顺序,你是对的。第一个是POSIX怎么样?