Vim переключает терминал обратно на исходный экран (откуда вы его запустили); Сам Vim использует альтернативный экран для отображения своего пользовательского интерфейса без полосы прокрутки терминала и без влияния на исходное содержимое. Нет никакой возможности обойти эту деталь реализации.
Вы можете использовать GVIM; так как он не работает в терминале, он поставляется с собственной (сырой) эмуляцией терминала, и тот просто добавляет вывод в расположение командной строки; исходное содержимое окна просто прокручивается из вида, чтобы освободить место для вывода команды оболочки. Даже с этим, вы не можете делать никаких взаимодействий, пока отображается вывод; как только вы подтвердите запрос, вывод исчезнет.
В терминале вы уже упомянули возможные альтернативы. Простым решением было бы разделить окно терминала с помощью screen
или tmux
, а затем запустить Vim в одном и команды оболочки в другом окне. Большим преимуществом здесь является то, что вы можете работать как параллельно, так и переключаться назад и вперед.
Начиная с Vim 8.1, Vim имеет встроенное базовое мультиплексирование терминала; то есть вы можете запустить терминал в окне Vim с помощью :terminal
, а затем переключиться в Vim с помощью оконных команд по умолчанию.
Для Vim 7, без использования внешних терминальных мультиплексоров, все, что вы можете сделать, это захватить выходные данные команды оболочки в чистом буфере:
:new | 0read !{bash-command}
Это основной рецепт; Вы можете расширить это с помощью нумерации буферов, автоматического удаления буферов при закрытии и так далее. Подробнее см. на этой вики-странице Vim Tips .
Это хорошо работает для неинтерактивных команд, выполнение которых не занимает много времени; вы не видите вывод в реальном времени, ни то, что вы вводите.