Відповіді:
Так, наприклад, якщо ви хочете це зробити 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 в одному та іншому, доступному для інших робіт одночасно.