Вставить вывод системной команды в текущую папку в vim


33

В VIM, когда я использую

:r !ls somefilename

он вставляет вывод этой команды в новую строку ниже текущей строки.

Если я сделаю

let @a = system("ls")

и позже

"ap

он по-прежнему вставляет вывод в новую строку ниже текущей строки.

Есть ли способ сделать вывод vim вставки в текущем месте?


Обратитесь к этому полезному ответу. Выполните текущую строку в bash от vim
Rohan Ghige

Ответы:


14

Вы можете вставить содержимое буфера обмена между символами с помощью Ctrl-R * в режиме вставки (и аналогичный подход для других буферов). Так что, если вы можете получить системную команду в буфер, вы должны быть установлены. (Источник: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l")поместит вывод ls -lв регистр a. Затем вы можете вставить его (в режиме вставки) с помощью ^R-a.


Кроме того, на большинстве платформ буфер обмена синхронизируется с регистром (обычно *), поэтому, если вы передадите выходные данные своей команды в буфер обмена, "*вы сможете ее использовать.
Бруно Броноски

39
:r !command 

прочитает вывод команды и вставит его в строку под текущей строкой. Вот как программируется vi, вы не можете изменить поведение.

Но скажите, если вы находитесь в строке № 3. Если вы попытаетесь :r !date. Он вставит значение даты в строку № 4.

Если вы хотите, чтобы значение даты отображалось в строке № 3, попробуйте :2r !dateвставить значение даты в строку № 3.


4
Это вставляет в другую строку, но все еще в отдельной строке. Я хочу вставить его в текущем месте!
Дешмух

13

Вот альтернативный способ вставки вывода из внешней команды перед курсором:

:exe 'norm i' . system("ls -l")

или используйте выражение register ( :help @=):

"=system('ls -la')

затем нажмите P. Или более коротким путем:

<CTRL-R>=system('ls -la')<CR>

4
Это ответ.
Джейкоб

1
Согласовано! Это действительно должен быть правильный ответ, потому что он включает в себя более программное решение (с :exe), которое может быть включено в команды.
metasoarous
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.