Ответы:
Да, например, если вы хотите сделать ls
, попробуйте:
:!ls
Чтобы порождать раковину, используйте
:shell
:w !sudo tee %
nano
Я обычно использую ctrl+z
для сна vi, запускаю то, что мне нужно, в оболочке, а затем fg
возобновляю vi. Не совсем ответ на ваш вопрос, но я считаю, что это очень быстрый способ работы.
Если вы забудете, что vi открыт в фоновом режиме (это может произойти, когда вы заняты), при попытке выйти из оболочки с помощью ctrl+d
вас будут предупреждены, что у вас запущены фоновые задания, и вы можете закрыть их, или снова нажмите Ctrl + D, чтобы выйти. Кроме того, если вы попытаетесь открыть один и тот же файл дважды, вы получите предупреждение о восстановлении, поэтому вы можете нажать, a
чтобы прервать, и запустить fg, чтобы вернуться к vi.
Поскольку вы упомянули «получить стандартный вывод», обратите внимание, что вы можете сделать
:r! command
и вывод команды будет добавлен в файл, или
:<range>!command
фильтровать содержимое диапазона с помощью команды [например :1,$!wc
]
:%!command
выглядит довольно полезно
:.,+20 !sort
]
Моя любимая идиома
!!command
что является сокращением для
:.!command
которая пропускает текущую строку через команду и вставляет вывод в файл. Наиболее распространенный случай для меня - отредактировать команду с помощью vi и запустить:
!!sh
Или
!<motion>command
такие как (например)
!apsh
выполнить весь текущий абзац через оболочку.
!}
вы должны быть расположены в начале абзаца, попробуйте !ap
. (Я не знаю, есть ли это в каждом vi или только в vim)
Используя двоеточие и восклицательный знак, вы можете выполнить любую команду в пути оболочки и сценариях оболочки, помните, что команда выполняется под пользователем, запускающим программу vi / vim и использующим ее среду.
:!<command>
Поскольку vi использует среду, которая действовала при запуске, он использует тот же путь, который был в родительской команде. Имейте в виду, что некоторые оболочки хранят кеш программ в пути, и vi может не работать с этим кешем (в зависимости от используемой оболочки и ее версии), поэтому вы можете запустить неправильный двоичный файл в случае, если у вас больше чем один двоичный файл с тем же именем.
Вы можете увидеть вывод команды, набрав, например, :!ls -lh
в командном режиме.
Если вы хотите вставить вывод команды в файл, который вы редактируете, просто добавьте r
. Например, :r!which perl
.
У меня есть это в моем .vimrc. Найден на переполнении стека некоторое время назад:
" 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 в одном, а другой одновременно для другой работы.