tl; dr
... | tmux loadb -
tmux saveb - | ...
Explicación y antecedentes
En tmux, toda la actividad de copiar / pegar pasa por la pila del búfer, donde la parte superior (índice 0) es el texto copiado más recientemente y se usará para pegar cuando no se proporcione explícitamente ningún índice del búfer -b
. Puede inspeccionar los búferes actuales con tmux list-buffers
o el acceso directo predeterminado tmux-prefix+ #.
Hay dos formas de conectar un nuevo búfer tmux en la parte superior de la pila, set-buffer
tomando un argumento de cadena y load-buffer
tomando un argumento de archivo. Para canalizar en un búfer, generalmente desea usar load-buffer
con stdin, por ejemplo:
print -l **/* | tmux loadb -
Pegar esto de nuevo en los editores y tal es bastante obvio ( tmux-prefix+ ]o lo que sea que haya vinculado paste-buffer
), sin embargo, acceder a la pasta desde el interior del shell no lo es, ya que invocarla paste-buffer
pegará en stdin, que termina en la edición de su terminal buffer, y cualquier nueva línea en el pegado hará que el shell ejecute lo que se haya pegado hasta ahora (potencialmente una excelente manera de arruinar su día).
Hay un par de formas de abordar esto:
tmux pasteb -s ' '
: -s
reemplaza todas las terminaciones de línea (separadores) con cualquier separador que proporcione. Sin embargo, aún obtienes el comportamiento paste-buffer
que significa que la pasta termina en el búfer de edición de tu terminal, que puede ser lo que deseas, pero generalmente no lo es.
tmux showb | ...
: show-buffer
imprime el búfer en stdout, y es casi lo que se requiere, pero como Chris Johnsen menciona en los comentarios , show-buffer
realiza la codificación octal de caracteres ASCII no imprimibles y caracteres no ASCII. Desafortunadamente, esto se rompe con la frecuencia suficiente para ser molesto, incluso con cosas simples como cadenas terminadas en nulo o caracteres latinos acentuados (por ejemplo, (en zsh) print -N á | tmux loadb - ; tmux showb
impresiones \303\241\000
).
tmux saveb - | ...
: save-buffer
simplemente hace el reverso load-buffer
y escribe los bytes sin modificar en stdin, que es lo que se desea en la mayoría de los casos. Entonces podría continuar ensamblando otra tubería, y por ejemplo. pasar a través | xargs -n1 -I{} ...
de la línea de proceso sabio, etc.
tmux show-buffer
realizará la codificación octal de caracteres de control C0 y bytes no ASCII (por ejemplo, caracteres latinos acentuados, etc.). Puede usarlotmux save-buffer -
si desea los bytes sin procesar (esto suele ser lo que desea).