3

Я хочу отправить команды на отдельную панель tmux из vim, и я подумал, что проще всего было mkfifo поименовать pipe /tmp/cmds и запустить bash < /tmp/cmds для прослушивания команд, которые нужно запустить.

Затем я выполняю echo "echo \"hello world\" > /tmp/cmds" качестве теста, это работает только для одной команды и xargs закрывается немедленно. Есть ли способ сохранить это после более чем одной команды?

2 ответа2

1

это ничем не отличается от запуска xargs в интерактивной оболочке и заканчивается переводом строки, поэтому он завершится и завершится.

Вы должны написать цикл и выполнить для каждой строки ввода из стандартного ввода, таких как

в то время как :; делать xargs </tmp/cmds; сделанный

не проверено, поэтому вам может понадобиться настроить.

0

Если кому-то интересно, вот скрипт, который я использую для отправки команд из vim:

#!/bin/sh
FIFO=${1:-"/tmp/cmds"}
mkfifo $FIFO &> /dev/null
while :; do bash < $FIFO && echo "== OK ==" || echo "!! ERR !!"; done

Вот функция vim для отправки команд в этот канал:

function! RCmd(cmd)
  :silent! exe '!echo "cd ' . getcwd() . ' && ' . a:cmd . '" > /tmp/cmds'
  :redraw!
endfunction

Отображение, которое отправляет make в окно <F4>

map <F4> :call RCmd("make")<CR>

Повеселись!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .