tl; dr
-
... | tmux loadb -
-
tmux saveb - | ...
Explicação & Antecedentes
No tmux, toda a atividade de copiar / colar passa pelo conjunto de buffers em que a parte superior (índice 0) é o texto copiado mais recentemente e será usado para colar quando nenhum índice de buffer for explicitamente fornecido com -b
. Você pode inspecionar os buffers atuais com tmux list-buffers
ou o atalho padrão tmux-prefix + # .
Existem duas maneiras de inserir um novo buffer de tmux no topo da pilha, set-buffer
tomando um argumento de string, e load-buffer
tomando um argumento de arquivo. Para canalizar em um buffer, você geralmente deseja usar load-buffer
com stdin, por exemplo:
print -l **/* | tmux loadb -
Colocando isso de volta nos editores e tal é bastante óbvio ( prefixo do tmux + ] ou o que você tiver vinculado paste-buffer
), no entanto, acessando a pasta de dentro do shell não é, porque invocar paste-buffer
vai escrever a pasta em stdin, que acaba no buffer de edição do seu terminal, e qualquer nova linha na pasta fará com que o shell execute o que foi colado até agora (potencialmente um ótima maneira de arruinar o seu dia).
Existem algumas maneiras de abordar isso:
-
tmux pasteb -s ' '
:-s
substitui todos os finais de linha (separadores) por qualquer separador que você forneça. No entanto, você ainda obtém o comportamento depaste-buffer
, o que significa que a pasta acaba no seu buffer de edição do terminal, que pode ser o que você quer, mas geralmente não é. -
tmux showb | ...
:show-buffer
imprime o buffer para stdout e é quase o que é necessário, mas como Chris Johnsen menciona nos comentários ,show-buffer
executa a codificação octal de caracteres ASCII não imprimíveis e caracteres não-ASCII. Isso infelizmente quebra com freqüência suficiente para ser irritante, mesmo com coisas simples, como strings terminadas com nulo ou caracteres latinos acentuados (por exemplo, (em zsh)print -N á | tmux loadb - ; tmux showb
imprime31
).tmux saveb - | ...
0 -
save-buffer
:load-buffer
simplesmente faz o contrário de| xargs -n1 -I{} ...
e grava os bytes brutos não modificados em stdin, o que é desejado na maioria dos casos. Você poderia então continuar a montar outro tubo e, por exemplo. passar %code% para linha de processo, etc.