Третья группа слов, которая сейчас находится в конце следующей строки,
быть добавленным к текущему. Чтобы сделать это, количество
слова в первой группе определяется. С текущей строки
содержит только первую группу, это число рассчитывается по
разделение содержимого строки на группы, разделенные пробелами
используя функцию split()
,
len(split(getline('.')))
(getline('.')
вернуть текущую строку в виде строки, split()
преобразует эту строку в список слов, len()
считает число
элементов в списке.)
Используя это количество слов, генерируется команда подстановки и
запустить с помощью команды :execute
,
:exe's/\ze\n\%(\s*\w\+\)\{'.len(split(getline('.'))).'}\(.*\)$/\1'
Замены имеют следующую структуру,
:s/\ze\n\%(\s*\w\+\)\{
N
}\(.*\)$/\1
где N
- количество слов, которые были помещены перед
слэш.
Шаблон соответствует символу новой строки текущей строки
точно на N
слов во второй строке. Слово соответствует
последовательность пробелов, предшествующих серии из одного или нескольких слов
символы (см. :help /\s
и :help /\w
). Шаблон слова
заключенные в скобки \%(
и \)
(см. :help
/\%(
) для обработки его как отдельного атома для спецификатора \{N}
(см.
:help /\{
), чтобы точно соответствовать N
вхождений этого.
оставшийся текст до конца следующей строки сопоставляется как подгруппа
ссылка на строку подстановки.
Из-за атома \ze
в самом начале шаблона его
совпадение имеет нулевую ширину (см. :help /\ze
). Итак, замена
заменяет эту пустую строку перед символом новой строки на текст
соответствует подгруппе, вставляя третью группу слов после
первый.