나는 이 키 바인딩을 작동시켜 현재 창의 내용을 내가 선택한 프로그램으로 연결하려고 합니다.
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"
여기에 있는 명령을 하나씩 실행하면 프로그램은 다른 파이프에서와 마찬가지로 창에 텍스트를 받습니다. 내가 뭘 잘못했나요?
답변1
new-window
명령 사이에 경합이 있는 것 같습니다 delete-buffer
. 즉, vim이나 실행하려는 프로그램으로 파이프되기 전에 "PIPE" 버퍼가 삭제됩니다.
아래의 추악한 해킹은 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'"