#c #shell #vim
#c #оболочка #vim
Вопрос:
Я новичок в C.
Я видел system()
fork()
и execv()
прочее, но я не думаю, что это то, что мне нужно (или они просто не работают).
Я просто хочу, чтобы моя программа на C немедленно открыла vim с указанием пути к файлу для редактирования, затем я могу выйти из vim, и программа продолжит работу, в моем случае она просто завершится.
Подумайте, например git commit
, он открывает vim для меня, а затем, когда я сохраняю выхожу, он отправляет коммит.
Есть какие-нибудь идеи?
Комментарии:
1.
system()
звучит уместно, если вы согласны с тем, что ваша программа заблокирована во времяvim
выполнения2. Поскольку вы упомянули git, github.com/git/git/blob/master/commit.c
3. Что пошло не так при попытке использовать
system
или любую из упомянутых вами функций?system
, или какая-то формаfork
exec*
wait*
будет работать просто отлично. В нынешнем виде это не очень подходящий вопрос для SO (нет кода, нет попыток). Сначала вы должны попытаться решить проблему и задавать вопросы, когда вы действительно застряли.4. эй, ребята, спасибо за эти комментарии — я просто неправильно использовал
system()
! Спасибо за эту ссылку на github и все, я ценю это, ребята5. Можете ли вы опубликовать свое решение ниже для других людей, которые ищут ответ в будущем?
Ответ №1:
System(3)
выполнит работу, но имейте в виду, что если вы вызовете свою программу с перенаправлением ввода / вывода не на терминал, это распространится на выполнение vim
, и оно не будет работать.
vim(3)
требуется, чтобы ввод и вывод были направлены на линию терминала, он не может работать с перенаправленным вводом, поэтому лучшим способом его вызова должно быть (with system()
):
system("/usr/bin/vim file </dev/tty >/dev/tty");
В предложениях перенаправления указано, что ввод и вывод перенаправляются на терминал управления сеансом, так что вы сможете заставить его работать, даже если вы перенаправили стандартный ввод / вывод в основной программе.
Ответ №2:
system()
это то, что я искал, я использовал его неправильно, но это просто, просто используйте:
system("vim path/to/file.txt");
откроет vim текущего направления и будет работать, как ожидалось (например git commit
)