Ось вам:
: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
команда оновить шаблон пошуку, то ви можете опустити шаблон для заміни в команді-заміннику. (ref:, :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
команду. Я залишу його, але не рекомендую використовувати його. Перший - чистіший і простіший.