Было сложно сформулировать это как вопрос, но вот что я хочу сделать:
Я хочу, чтобы vim выполнял процесс и неоднократно писал в его стандартный ввод и считывал его файловые дескрипторы стандартного вывода. Другими словами, мне нужен двусторонний диалог между vim и другой программой.
Я буду использовать кошку в качестве простого примера. Если вы запускаете cat без аргументов командной строки, то все, что вы вводите на стандартный ввод, выводится на стандартный вывод после каждого символа новой строки.
Я хотел бы иметь окно vim, в котором отображаются самые последние выходные данные какой-либо программы, и иметь возможность писать на ее стандартный ввод при определенных событиях. Итак, в отличие от следующего:
:read !cat
который ждет, пока вы закончите печатать и нажмете Ctrl-D, чтобы закрыть кошачий стандартный ввод, я хочу отобразить вывод сразу после того, как я нажму ввод, и чтобы процесс продолжался, чтобы я мог печатать больше.
В конечном счете, я не собираюсь вводить данные в процесс; Я хочу, чтобы события (например, перемещение курсора) запускали vim для записи определенных команд в этот процесс и отображения вывода.
Причина, по которой я хочу, чтобы программа продолжала работать, а не вызывала процесс один раз для каждого события, заключается в том, что выводом для программы будут команды, генерирующие состояние. Если бы программу нужно было вызывать для каждой команды, ей пришлось бы сохранять состояние в файл и каждый раз считывать его.
Я рассматриваю альтернативу: написание программы для прослушивания порта. Затем vim вызывает команду, которая просто открывает сокет, передает команду vim программе и возвращает сообщение из программы. Это потребует от меня написания двух программ, что, я надеюсь, не нужно.
Что я пытаюсь здесь сделать, так это написать инструмент, который анализирует ваш код и предоставляет интерактивный интерфейс командной строки (например, такие команды делают такие вещи, как «вывод списка всех строк, которые устанавливают эту переменную»). Однако вместо запуска эту программу в отдельном сеансе терминала или экрана, я бы хотел, чтобы vim мог интегрировать вывод этой программы в окно, если это возможно.