ТЛ; др
... | tmux loadb -
tmux saveb - | ...
Объяснение и история вопроса
В tmux вся деятельность по копированию / вставке проходит через буферный стек, где верхняя часть (индекс 0) является последним скопированным текстом и будет использоваться для вставки, когда явно не указан индекс буфера -b
. Вы можете проверить текущие буферы с помощью tmux list-buffers
или ярлыка по умолчанию tmux-prefix+ #.
Существует два способа передачи в новый буфер tmux в верхней части стека, set-buffer
принимая строковый аргумент и load-buffer
файловый аргумент. Для передачи в буфер, который вы обычно хотите использовать load-buffer
с stdin, например:
print -l **/* | tmux loadb -
Вставить это обратно в редакторы, и это довольно очевидно ( tmux-prefix+ ]или что бы вы ни связали paste-buffer
), однако, доступ к вставке из оболочки не возможен, потому что вызов paste-buffer
запишет вставку в stdin, что в конечном итоге приведет к редактированию вашего терминала. буфер, и любая новая строка в вставке заставит оболочку выполнить все, что было вставлено до сих пор (потенциально отличный способ испортить ваш день).
Есть несколько способов подойти к этому:
tmux pasteb -s ' '
: -s
заменяет все окончания строки (разделители) тем разделителем, который вы указали. Однако вы все равно получаете поведение, paste-buffer
которое означает, что вставка заканчивается в буфере редактирования терминала, что может быть тем, что вы хотите, но обычно это не так.
tmux showb | ...
: show-buffer
печатает буфер в stdout, и это почти то, что требуется, но, как упоминает Крис Джонсен в комментариях , show-buffer
выполняет восьмеричное кодирование непечатных символов ASCII и не-ASCII символов. Это, к сожалению, ломается достаточно часто, чтобы раздражать, даже с такими простыми вещами, как строки с нулевым символом в конце или латинские символы с акцентом (например, (в zsh) print -N á | tmux loadb - ; tmux showb
печатные издания \303\241\000
).
tmux saveb - | ...
: save-buffer
просто выполняет обратную операцию load-buffer
и записывает необработанные байты без изменений в стандартный ввод, что в большинстве случаев является желаемым. Затем вы можете продолжить сборку другой трубы, например. пройти | xargs -n1 -I{} ...
до технологической линии и т.д.
tmux show-buffer
выполнит восьмеричное кодирование управляющих символов C0 и байтов не ASCII (например, латинские символы с акцентом и т. д.). Вы можете использовать,tmux save-buffer -
если вы хотите необработанные байты (это обычно то, что вы хотите).