По-видимому, вы не можете, запись в файл stdin процесса не заставляет процесс читать то, что вы добавили. См. этот ответ для полного объяснения:https://serverfault.com/a/962956
Основываясь на ответе NotTheDr01ds , я получил полное решение как:
bind-key -T copy-mode ! command-prompt -p "cmd:" "send-keys -X copy-selection-no-clear \; run-shell \"tmux show-buffer | %1\" "
bind-key -T copy-mode-vi ! command-prompt -p "cmd:" "send-keys -X copy-selection-no-clear \; run-shell \"tmux show-buffer | %1\" "
Использование :выберите текст, затем нажмите !
. Вам будет предложено ввести команду оболочки для запуска. Выбранный текст будет передан команде оболочки как стандартный ввод. Стандартный вывод команды оболочки будет отображаться обратно на панель tmux.
Спасибо NotTheDr01ds за отличный совет!
Вы близко; ну вроде -оф. Команды режима копирования -необходимо отправлять через sendkeys -X
.
Таким образом, чтобы передать выделенный текст команде,было бы:
send-keys -X copy-pipe "wc"
НО, Tmux нигде не отображает вывод copy-pipe
. При использовании run-command
вывод отображается в буфере копирования -. Для copy-pipe
вроде бы просто сожрали. Пример, на который вы ссылались в другом ответе, просто сохранил буфер, поэтому вывод/обратная связь не требовались.
Для wc
это не слишком полезно. И я предполагаю, что вывод pastebin
— это вполне -полезный URL-адрес...
Самая простая альтернатива, которую я нашел, начинает запутываться, особенно , поскольку вы хотите сделать это с помощью произвольных команд:
send-keys -X copy-selection-no-clear ; run-shell "tmux show-buffer | wc"
Обратите внимание, что там нет проверки ошибок, чтобы определить, выбрано ли что-то. Он просто запустит show-buffer
для самого последнего буфера.
Поскольку Vim хорошо подходит для этого -варианта использования, используйте его. Настройте привязку клавиши -, которая открывает буфер обратной прокрутки в vim
, используя подстановку процесса.
Для испытаний в оболочке (испытано):
tmux bind-key -T copy-mode v new-window -d -n scrollback "vi <(tmux capture-pane -p -S - -E -)" \\\; run-shell "sleep 1" \\\; select-window -t scrollback
Или в вашем конфиге (untested):
bind-key -T copy-mode v new-window -d -n scrollback "vi <(tmux capture-pane -p -S - -E -)" \; run-shell "sleep 1" \; select-window -t scrollback
Хаки, да, и вам может понадобиться увеличить sleep
для больших буферов --Я не проверял это. Вероятно, есть лучший способ, но это то, что я придумал.
Также вы потеряете цветовые коды ANSI, но вы можете справиться с этим (, если хотите )с расширением AnsiEsc VIM, а также с добавлением -e
к capture-buffer
(, чтобы сохранить коды ANSI в выходном буфере ).