привязка ключа tmux к содержимому панели панели программы

Я пытаюсь заставить эту привязку ключа работать, чтобы передать содержимое текущей панели программе по своему выбору:

bind P command-prompt -I "vim -" \ "capture-pane -eJ -S - -E -; \ set-buffer -n PIPE; \ new-window -n '|%1' 'tmux save-buffer -b PIPE - | %1'; \ delete-buffer -b PIPE" 

– но это всегда приводит к тому, что tmux не сообщает no buffer PIPE . Этот текст обычно отображается и перезаписывается слишком быстро, чтобы я даже заметил его; Мне удалось вызвать его, используя sleep 10 качестве имени команды для вывода вывода.

Я решил переименовать автоматически названный буфер, созданный панелью capture-pane потому что в противном случае вызов new-window казалось, сбросил текущий / стандартный буфер tmux в то, что я последний раз скопировал в режиме копирования. Насколько я могу судить, новый буфер должен быть переименован в PIPE .

У меня есть аналогичная, но более простая привязка, которая выводит содержимое в файл, а не в трубу, отлично работает:

 bind H command-prompt -I "tmux_#W.txt" \ "capture-pane -eJ -S - -E -; \ save-buffer '%%'; \ delete-buffer" 

Если я запускаю команды в нем один за другим, программа получает текст панели, как это было бы из любого другого канала. Что я делаю не так?

Кажется, что между new-window и командами delete-buffer есть гонка, то есть буфер «PIPE» удаляется, прежде чем он может быть отправлен в vim или любую другую программу, которую вы хотите выполнить.

Следующий уродливый взлом, который засыпает секунду до вызова delete-buffer исправляет проблему для меня:

 bind P command-prompt -I "vim -" \ "capture-pane -eJ -S - -E -; \ set-buffer -n PIPE; \ new-window -n '|%1' 'tmux save-buffer -b PIPE - | %1'; \ run-sh 'sleep 1 && tmux delete-buffer -b PIPE'"