Я использую node.js для написания интерфейса командной строки, который генерирует файлы модульных тестов. Я использовал inquirer для получения пользовательского ввода, однако есть одно поле, в котором пользователь, скорее всего, захочет скопировать-вставить и/или отредактировать большие многострочные фрагменты данных JSON. Поэтому моя цель: открыть vim в определенной точке CLI -> разрешить ввод-> закрыть vim -> записать в файл tmp -> обработать результат.
Проблема в том, что ввод в vim также идет на родительский stdin, и когда нажата клавиша возврата, программа продолжает работу поверх vim (беспредел). Я совершенно уверен, что stdio/in/out/err не настроены должным образом, но я нигде не могу найти точное решение. Каждая итерация моего манипулирования потоками кажется ближе, но я знаю, что есть небольшое недостающее звено.
я пробовал много вещей по линии:
var vim = child_process.spawn('vim', [path], {stdin: 'pipe', stdout: 'pipe', stderr: 'pipe'});
var vim = child_process.spawn('vim', [path], {stdio: 'inherit'}); //{stdio: ['pipe','pipe','pipe']}
Наконец, я выполнил множество манипуляций со stdio из этого примера, js">Как мне открыть терминальное приложение из node.js?, но все еще остается небольшая недостающая ссылка, с которой мне нужна помощь
Примечания:
- Я на 99% уверен, что мои асинхронные обещания в порядке.
- это не обязательно должен быть vim, так как я сначала проверяю ENV для редактора
- Я сравниваю это с git commit, где появляется редактор и позволяет вводить данные перед закрытием.
- в небольшой тестовой программе я могу получить идеальную функциональность, но при попытке сделать это поверх другого процесса ничего не получается
tl;dr : я хочу игнорировать родительский процесс, пока ввод идет только в vim (child_process), но я не могу разделить их, и из-за этого программа выходит из строя
Если есть что-то, что я могу прояснить, пожалуйста, дайте мне знать. Спасибо!