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


14

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

:! echo "foo" >> %

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

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

Ответы:


24

Да:

:r !echo "foo"

Видеть

:help :r!

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

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

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

:help let-@
:help system()

Посмотрев на справку и поэкспериментировав, я вижу, что 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.