У меня есть следующая строка из строк, разделенных табуляцией; У меня иногда несколько последовательных <Tab>
:
zer<Tab><Tab>abc<Tab>def<Tab><Tab>iop<Tab><Tab>
Я хочу вставить пустую строку между двумя последовательными <Tab>
; Я запускаю следующую команду:
:s/\t\(\t\)\@=/\tnull/eg
, что дает мне, как я ожидал:
zer<Tab>null<Tab>abc<Tab>def<Tab>null<Tab>iop<Tab>null<Tab>
Эквивалентная функция замены для приведенной выше команды (я повторил ее результат):
:echo substitute(getline('.'),'\t\(\t\)\@=','\tnull','eg')
, который вставляет <Tab>
только между первыми двумя <Tab>
s:
zer<Tab>null<Tab>abc<Tab>def<Tab><Tab>iop<Tab><Tab>
, тогда как если I изменить порядок замещающих флагов при вызове замещающей функции ('eg'
заменяется на 'ge'
):
:echo substitute(getline('.'),'\t\(\t\)\@=','\tnull','ge')
Тогда я получаю ожидаемый результат:
zer<Tab>null<Tab>abc<Tab>def<Tab>null<Tab>iop<Tab>null<Tab>
Похоже, что порядок флагов в функции substitute () меняет свое поведение, но не влияет на команду substitute.
У кого-нибудь есть идеи, почему?