Попробуйте следующее.Сначала определите функцию для сохранения ваших соответствующих регулярных выражений в список (: help List).
:fun Add(list, item)
: call add(a:list, a:item)
: return a:item
:endfun
Обратите внимание, что он также возвращает добавленный элемент.В этом нет необходимости, но то, что вы возвращаете здесь, становится текстом замены в: замене, который следует ниже.
Затем создайте пустой список.
:let list=[]
Затем запустите регулярное выражение.
:%s/^\S\+/\=Add(list, submatch(0))/
Обратите внимание, что замена начинается с \ = (см .: help sub-replace-special).В результате мы заменяем выражение соответствия на себя, но в то же время записываем результат в список.
Функция submatch () возвращает совпадающие части команды: substitute.submatch (0) возвращает полное совпадение.
Обратите внимание, что в качестве побочного эффекта буфер помечается как измененный.Если вы сохранили буфер перед выполнением подстановки, вы можете исправить это, просто нажав u для отмены или добавив '|ты в твоем распоряжении.(Если вы собираетесь отменить операцию, то не имеет значения, что мы возвращаем из нашей функции Add.)
Вы можете просмотреть свои совпадения с помощью
:echo list
или добавить их.в ваш буфер с
:$put=list
Надеюсь, это поможет.Это просто, если вы знаете, как это сделать, но там многое можно переварить.
О, я почти забыл!Вы можете добавить свои совпадения в буфер обмена с помощью
:let @+ = join(list, '^@')
Тогда ваши совпадения будут находиться в буфере обмена, каждый на отдельной строке.
^ @ представляет символ NUL и генерируется с помощью, то есть нажмите control-V, а затем control-J.(Почему вы должны использовать ^ @, это целая тема сама по себе.)