ฉันจะเขียน scrollback ทั้งหมดในเซสชัน tmux ไปยังไฟล์ได้อย่างไร
capture-panel
สามารถคว้าหน้าจอปัจจุบัน แต่ไม่สามารถเลื่อนกลับทั้งหมดได้
ฉันจะเขียน scrollback ทั้งหมดในเซสชัน tmux ไปยังไฟล์ได้อย่างไร
capture-panel
สามารถคว้าหน้าจอปัจจุบัน แต่ไม่สามารถเลื่อนกลับทั้งหมดได้
คำตอบ:
ขึ้นอยู่กับค่าhistory-limit
ที่คุณตั้งไว้ใน.tmux.conf
- ค่าเริ่มต้นคือ 2000 หากคุณต้องการเก็บข้อมูลเพิ่มเติมคุณจะต้องกำหนดจำนวนบรรทัดอย่างชัดเจน
ในการจับภาพการเลื่อนทั้งหมดเข้าสู่โหมดการคัดลอกเลือกการเลื่อนทั้งหมดและดึงลงในบัฟเฟอร์จากนั้นวางลงในไฟล์ของคุณ
วิธีการทำสิ่งนี้ให้สำเร็จขึ้นอยู่กับmode-keys
ตัวเลือกที่คุณต้องการ vi หรือ emacs man tmux
มีตารางที่เป็นประโยชน์อธิบายกุญแจที่เกี่ยวข้อง
ฉันมีสิ่งต่อไปนี้ใน.tmux.conf
การทำให้สิ่งนี้ง่ายขึ้น:
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
กระบวนการในการจับภาพ scrollback แบบเต็มคือ:
PrefixEsc : เพื่อเข้าสู่โหมดถ่ายสำเนา
v : เพื่อเริ่มการเลือกภาพ (สมมติว่าคุณอยู่ที่ด้านล่างของหน้าจอ)
gg : เพื่อจับทุกอย่างใน scrollback
y : เพื่อดึงมันลงในบัฟเฟอร์
Prefixc : เปิดอีกหน้าต่าง tmux
vim scrollback.txt
i : เข้าสู่โหมดแทรกในกลุ่ม
Prefixp : วางลงในไฟล์
นอกจากนี้ยังมีคำตอบที่นี่อธิบายถึงวิธีการคัดลอกบัฟเฟอร์ไปยังไฟล์ชั่วคราวโดยใช้xsel
ที่อาจมีประโยชน์
:set paste
เป็นกลุ่ม, กลุ่มจะไม่สนใจการเพิ่มการเยื้องอัตโนมัติหรือการป้อนคำสั่งผสมใด ๆ
.tmux.conf
...
สำหรับผู้ที่ต้องการคำตอบง่ายๆให้ใช้prefix+ :จากนั้นพิมพ์capture-pane -S -3000
+ return(แทนที่3000
ด้วยบรรทัดที่คุณต้องการบันทึก) บรรทัดนี้จะคัดลอกบรรทัดเหล่านั้นลงในบัฟเฟอร์
จากนั้นในการบันทึกบัฟเฟอร์ลงในไฟล์เพียงใช้prefix+ :อีกครั้งและพิมพ์ในsave-buffer filename.txt
+ returnแทนที่filename
ด้วยสิ่งที่คุณต้องการ
(โดยค่าเริ่มต้นprefixคือctrl + b)
save-buffer filename.txt
ดูเหมือนว่าจะบันทึกไฟล์/
ไม่ใช่ในpwd
(ไดเรกทอรีปัจจุบัน) แต่ฉันให้เส้นทางไฟล์ที่แน่นอนและมันทำงานได้อย่างมีเสน่ห์
ด้วยtmux 1.5 capture-pane
คำสั่งยอมรับ-S
และ-E
เพื่อระบุบรรทัดเริ่มต้นและสิ้นสุดของการดักจับ ค่าลบสามารถใช้เพื่อระบุบรรทัดจากประวัติ save-buffer
เมื่อคุณมีข้อมูลในบัฟเฟอร์คุณสามารถบันทึกด้วย
นี่คือตัวอย่างการเชื่อมโยง (เหมาะสำหรับ.tmux.conf
) ที่ล้อมรอบทั้งหมดพร้อมกับพร้อมต์ชื่อไฟล์:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
การจับภาพนี้ (สูงสุด) 32768 บรรทัดของประวัติรวมถึงบรรทัดที่แสดงในปัจจุบัน เริ่มต้นด้วยtmux 1.6 คุณสามารถใช้ตัวเลขลงไปที่ INT_MIN หากบานหน้าต่างของคุณมีประวัติที่ลึกกว่า 32Ki บรรทัด (โดยปกติจะสูงถึง 2Gi) การเริ่มต้นในtmux 2.0 คุณสามารถใช้capture-pane -S -
เพื่อหมายถึง“ เริ่มต้นที่จุดเริ่มต้นของประวัติศาสตร์” (เช่นไม่มีหมายเลขติดลบขนาดใหญ่ที่กำหนดค่าตายตัว)
หมายเหตุ: จำนวนบรรทัดในไฟล์ที่บันทึกจะไม่เท่ากับขีด จำกัด ประวัติของบานหน้าต่างเสมอพร้อมกับความสูง
เมื่อบัฟเฟอร์ประวัติของบานหน้าต่างเต็มtmuxจะทิ้ง 10% ที่เก่าที่สุดของบรรทัดแทนที่จะทิ้งเพียงหนึ่งบรรทัด ซึ่งหมายความว่าบางครั้งประวัติความลึกที่มีประสิทธิภาพของบานหน้าต่างจะต่ำถึง 90% ของขีด จำกัด ที่กำหนดไว้
tmux server-info | head -1
เพื่อดูรุ่นของคุณ tmux -V
ทำงานใน tmux * 1.4 และใหม่กว่า
[PrefixKey] :
เพื่อไปยังบรรทัดคำสั่ง tmux แล้ววางทั้งบรรทัดจากนั้นคุณก็แค่ทำ[Prefix] P
มันเป็นตัวพิมพ์ใหญ่และคุณก็สบายดี
ฉันมีการเชื่อมโยงคีย์มาตรฐานซึ่งดูเหมือนจะแตกต่างจากในคำตอบ @ jasonwryanและไม่ได้เปลี่ยนแปลงอะไรในการกำหนดค่า
ด้านล่างนี้เป็นสูตรอาหารที่เหมาะกับฉัน บางทีคุณอาจพบว่ามีประโยชน์หากคุณไม่ต้องการเปลี่ยนแปลงใด ๆ ในการกำหนดค่า tmux และเพียงต้องการคัดลอก scrollback บางส่วนอย่างรวดเร็ว
Prefix== Ctrl+bใน tmux ของฉัน (tmux 1.6, debian 7)
หากคุณต้องการบางสิ่งที่คุณสามารถเรียกใช้ได้จากบรรทัดคำสั่ง (แทนที่จะใช้คีย์คำนำหน้า tmux ของคุณ) ให้ลองเรียกใช้:
tmux capture-pane -pS -1000000
หากคุณเรียกใช้และดูเหมือนว่าจะไม่ทำอะไรเลยนั่นเป็นเพราะมันแสดงผลออกมาเหมือนที่ปรากฏบนหน้าจอของคุณดังนั้นมันจึงดูเหมือนกัน
แน่นอนคุณสามารถไปป์เป็นไฟล์ได้ด้วย:
tmux capture-pane -pS -1000000 > file.out
ดูtmux
man page และค้นหาcapture-pane
สิ่งต่าง ๆ ที่คุณสามารถทำได้ (เช่นลำดับการดักจับในกรณีที่คุณต้องการรักษาสีหรือระบุว่าคุณต้องการให้มีการเชื่อมโยงหลาย ๆ ภาพเมื่อไม่มีบรรทัดใหม่หรือไม่)
นี่คือปลั๊กอิน tmux ที่เปิดใช้งานสิ่งนี้:
https://github.com/tmux-plugins/tmux-logging
หลังจากที่คุณติดตั้งบันทึก scrollback prefix + alt-shift-p
ทั้งหมดที่มี
นี่เป็นเรื่องง่ายมาก เข้าสู่โหมดคำสั่งจากสื่อมวลชนแล้วprefix key
:
จากนั้นทำcapture-pane -S -<line number you want to dump>
แล้วsave-buffer <filepath>
ไฟล์นั้นมีเอาต์พุตการเลื่อนกลับทั้งหมด คุณควรลบบัฟเฟอร์ในภายหลังเพื่อความปลอดภัย
ฉันจะเขียน scrollback ทั้งหมดในเซสชัน tmux ไปยังไฟล์ได้อย่างไร
ฉันใช้สิ่งนี้ใน~ / .tmux.confของฉันและตอนนี้เมื่อฉันออกจากเชลล์ที่กำลังรันเอาต์พุตของบานหน้าต่างจะถูกบันทึกลงในไฟล์บันทึกที่ไม่ซ้ำกัน:
set -g remain-on-exit
set-hook pane-died 'capture-pane -S - -E - ; save-buffer "$HOME/logs/tmux/tmux-saved.#{host_short}-#{session_id}:#{window_id}:#{pane_id}-#{pane_pid}-#{client_activity}.log"; delete-buffer; kill-pane'