Для вашей проблемы вставки текстового текста выше или ниже строки, я бы пошел с решением jamessan использования :g/.../put a
. Однако, чтобы ответить на ваш вопрос об использовании регистра как части замены, вы можете использовать выражение для замены, начав его с \ =. Так что это также должно делать то, что вы хотите, предполагая, что текст «PROC SQL; ...» находится в регистре a:
:%s/^select/\=@a."\n".submatch(0)/
в выражении @a оценивает содержимое регистра a, а submatch (0) - это функция, которая оценивает строку, совпадающую с регулярным выражением.
Обратите внимание, что вся замена рассматривается как выражение, поэтому, если вы хотите включить обычный текст, вам нужно заключить его в кавычки и объединить строки с .
.