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