В Vim, каков элегантный способ получить выходные данные из командной строки?

14

Если я нахожусь в Vim и хочу получить какой-то вывод из командной строки и добавить его в мой текущий файл, я могу запустить это:

:! echo "foo" >> %

Это добавит «foo» к моему текущему файлу, и мне придется перезагрузить.

Есть ли более элегантный способ сделать это - поместить этот вывод в буфер, который я могу вставить, например?

Натан Лонг
источник

Ответы:

24

Да:

:r !echo "foo"

Видеть

:help :r!

Это вставит вывод команды после текущей строки. Если вы хотите записать вывод команды в регистр, который вы можете вставить, вы можете сделать это:

:let @a = system('echo "foo"')

Теперь вывод команды (включая завершающий перевод строки) находится в регистре a. Видеть

:help let-@
:help system()
garyjohn
источник
Посмотрев на справку и поэкспериментировав, я вижу, что 1) :rявляется сокращением от «read» (так что вы можете набрать «read» или просто «r», и это та же команда), и 2) выполнение :r path/to/foo.txtвставит содержимое этого файл после курсора.
Натан Лонг
Кроме того - я не знал о systemзвонке. Это потрясающе!
Натан Лонг
1
Я также не знал, что вы можете вручную установить регистры, как let @a = 'foo'. Одна интересная идея: после поиска и замены вы можете сохранить поисковый термин в регистр для вставки в другое место, выполнив: let @a = @/«сделать регистр содержащим то, что содержит / register, а именно мой последний поиск».
Натан Лонг
1
@ Натан Лонг: Пожалуйста. Другие способы вставки из / register: 1) выполнить, :put /чтобы поместить содержимое регистра на следующую строку, и 2) в режиме вставки набрать Ctrl-R, а затем /вставить содержимое регистра в позиции курсора. Подробнее об этом смотрите :help :putи :help i_CTRL-R.
garyjohn