Відповіді:
Так, наприклад, якщо ви хочете це зробити ls, спробуйте:
:!ls
Для нересту оболонки використовуйте
:shell
:w !sudo tee %
nano
Я схильний використовувати ctrl+zдля сну vi, виконувати те, що мені потрібно в оболонці, а потім fgвідновити vi. Не зовсім відповідь на ваше запитання, але я вважаю це дуже швидким способом роботи.
Якщо ви забудете, що у вас відкритий фон у фоновому режимі (це може статися, коли ви зайняті), коли ви намагаєтеся вийти з оболонки за допомогою ctrl+dвас, вас попередить, що у вас запущені фонові завдання, і ви можете або закрити їх, або знову натисніть ctrl + d, щоб вийти. Крім того, якщо ви спробуєте повторно відкрити один і той самий файл двічі, ви отримаєте попередження про відновлення, тож ви можете натиснути, aщоб перервати або запустити fg, щоб повернутися до vi.
Оскільки ви згадали про "дістати stdout", зауважте, що ви можете це зробити
:r! command
і вихід команди буде доданий у файл, або
:<range>!command
щоб зміст діапазону було відфільтровано за допомогою команди [наприклад :1,$!wc]
:%!commandвиглядає досить корисно
:.,+20 !sort]
Моя краща ідіома - це
!!command
який є скороченим
:.!command
який передає поточну лінію через команду та вставляє вихід у файл. Найпоширеніший випадок для мене - це редагувати команду з vi і запускати:
!!sh
Або
!<motion>command
наприклад (наприклад)
!apsh
пропустити весь поточний абзац через оболонку.
!}ви повинні розміщуватись на початку абзацу, спробуйте !ap. (Я не знаю, чи є це в кожному vi чи лише vim)
Використовуючи двокрапку та знак оклику, ви можете запустити будь-яку команду в шляху до оболонки та скриптах оболонки, майте на увазі, що команда працює під користувачем, який запускає програму vi / vim, та використовуючи її оточення.
:!<command>
Оскільки vi використовує середовище, яке діяло під час його запуску, воно використовує той самий шлях, який був у батьківській команді. Майте на увазі, що деякі оболонки зберігають кеш програм на шляху, і vi може не працювати з цим кешем (залежно від оболонки, яку він використовує та її версії), тож ви можете в кінцевому рахунку запустити неправильний бінарний файл, якщо у вас є більше ніж один двійковий файл з однаковою назвою.
Я маю це у своєму .vimrc. Знайдено на стеку Overflow деякий час назад:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Я б і так легко обійшов це в Linux, відкривши два вікна командного рядка терміналу, запустивши vi в одному та іншому, доступному для інших робіт одночасно.