เขียน tmux scrollback ทั้งหมดลงในไฟล์


194

ฉันจะเขียน scrollback ทั้งหมดในเซสชัน tmux ไปยังไฟล์ได้อย่างไร

capture-panel สามารถคว้าหน้าจอปัจจุบัน แต่ไม่สามารถเลื่อนกลับทั้งหมดได้

คำตอบ:


52

ขึ้นอยู่กับค่า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ที่อาจมีประโยชน์


2
นี่เป็นปัญหาที่ดีที่สุด ... การวางในโหมดแทรกใน Vim มีปัญหาทุกประเภทเช่นเมื่อคุณเปิดใช้งานการเยื้องอัตโนมัติ ฉันไม่เคยได้รับสิ่งนี้เพื่อทำงานเพื่อความพึงพอใจของฉัน
Konrad Rudolph

13
หากคุณใช้:set pasteเป็นกลุ่ม, กลุ่มจะไม่สนใจการเพิ่มการเยื้องอัตโนมัติหรือการป้อนคำสั่งผสมใด ๆ
tlunter

@tlunter เคล็ดลับที่ดี!
jasonwryan

สามารถทำได้ด้วยการเชื่อมโยงคีย์เริ่มต้นหรือไม่
daveloyall

@daveloyall แน่นอนก็ไม่ได้ใช้ตัวเลือก keybind ผมรวมจากฉัน.tmux.conf...
jasonwryan

224

สำหรับผู้ที่ต้องการคำตอบง่ายๆให้ใช้prefix+ :จากนั้นพิมพ์capture-pane -S -3000+ return(แทนที่3000ด้วยบรรทัดที่คุณต้องการบันทึก) บรรทัดนี้จะคัดลอกบรรทัดเหล่านั้นลงในบัฟเฟอร์

จากนั้นในการบันทึกบัฟเฟอร์ลงในไฟล์เพียงใช้prefix+ :อีกครั้งและพิมพ์ในsave-buffer filename.txt+ returnแทนที่filenameด้วยสิ่งที่คุณต้องการ

(โดยค่าเริ่มต้นprefixคือctrl + b)


14
save-buffer filename.txtดูเหมือนว่าจะบันทึกไฟล์/ไม่ใช่ในpwd(ไดเรกทอรีปัจจุบัน) แต่ฉันให้เส้นทางไฟล์ที่แน่นอนและมันทำงานได้อย่างมีเสน่ห์
MohamedEzz

15
และอย่าลืมว่าลบอยู่หน้า <<amount-of-buffer-lines-you-want-to-save>>
Yordan Georgiev

9
นี่คือคำตอบที่ดีที่สุดที่นี่ ขอบคุณมาก.
Jesse Atkinson

7
ใช่คุณชนะ นี่ควรเป็นคำตอบที่ดีที่สุด
wordoforthewise

1
+ n> 1 หลังจากลงชื่อเข้าใช้เพื่อโหวตมันจะปรากฏขึ้นอย่างน้อยครั้งที่สองที่คำตอบนี้มีประโยชน์กับฉัน XD
L0j1k

159

ด้วย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% ของขีด จำกัด ที่กำหนดไว้


1
คุณอาจใช้tmux 1.3 อยู่ คุณอาจใช้tmux server-info | head -1เพื่อดูรุ่นของคุณ tmux -Vทำงานใน tmux * 1.4 และใหม่กว่า
Chris Johnsen

1
นี่คือหนึ่งในคำสั่ง tmux ที่มีประโยชน์ที่สุดที่ฉันได้พบ
kenny

1
และถ้าคุณอยู่ในหน้าต่าง tmux ของคุณแล้วและไม่ต้องการรีสตาร์ทเพียงแค่ทำ[PrefixKey] : เพื่อไปยังบรรทัดคำสั่ง tmux แล้ววางทั้งบรรทัดจากนั้นคุณก็แค่ทำ[Prefix] P มันเป็นตัวพิมพ์ใหญ่และคุณก็สบายดี
Ali

1
@BradenBest คำนำหน้า SI จะต้องแนบกับหน่วย "32Ki" หรือ "32K" ไม่ถูกต้อง ไม่ต้องกังวลว่าตัวพิมพ์ใหญ่ K ไม่ใช่คำนำหน้า SI เป็นงานที่ดีที่อยู่ด้านข้างของคนเดินถนนที่หว่านความสับสนและทำให้มันผิด
Aleksandr Dubinsky

1
@BradenBest คำนำหน้าไบนารีหว่านความสับสนเพราะ 1 MB เคยมีความหมายที่แน่นอน แต่ตอนนี้มันมีสองความหมาย ที่เลวร้ายยิ่งความหมายทศนิยมนั้นไม่มีประโยชน์กับอุตสาหกรรมไอทียกเว้นผู้ผลิตสตอเรจที่ใช้มันเพื่อการตลาดที่ผิด ๆ ความสับสนนี้เริ่มต้นโดยคนเดินเท้าที่ปฏิเสธที่จะปฏิบัติ หากคุณเองไม่ใช่คนอวดรู้ฉันก็ขอโทษด้วยน้ำเสียงของฉันและกระตุ้นให้คุณพิจารณาความกระตือรือร้นของคุณสำหรับคำนำหน้าไบนารี
Aleksandr Dubinsky

19

ฉันมีการเชื่อมโยงคีย์มาตรฐานซึ่งดูเหมือนจะแตกต่างจากในคำตอบ @ jasonwryanและไม่ได้เปลี่ยนแปลงอะไรในการกำหนดค่า

ด้านล่างนี้เป็นสูตรอาหารที่เหมาะกับฉัน บางทีคุณอาจพบว่ามีประโยชน์หากคุณไม่ต้องการเปลี่ยนแปลงใด ๆ ในการกำหนดค่า tmux และเพียงต้องการคัดลอก scrollback บางส่วนอย่างรวดเร็ว

Prefix== Ctrl+bใน tmux ของฉัน (tmux 1.6, debian 7)

  1. Prefixเข้าสู่โหมดเลือก: [+
  2. เริ่มตัวเลือก: Space.
  3. เน้นข้อความที่จำเป็นโดยใช้ระบบนำทาง vim (ตัวอย่างเช่นใช้ปุ่มลูกศรหรือกดggเพื่อเข้าถึงจุดเริ่มต้นของประวัติเอาต์พุต)
  4. คัดลอกในคลิปบอร์ดภายในโดยใช้Enterจริง คุณจะออกจากโหมดคัดลอก
  5. เปิดไฟล์ใด ๆ ที่ใช้เป็นกลุ่ม (อาจบนแท็บ tmux ใหม่) และวางเนื้อหาคุณคัดลอกก่อนที่จะใช้+Prefix]
  6. จากนั้นคุณอาจจะทำแมวของไฟล์นั้นหรือใช้เอาท์พุทตามที่คุณต้องการ

man tmux ช่วยให้ฉันแยกแยะว่า tmux ของฉันอยู่ในโหมด emacs ดังนั้นจึงไม่มีการเชื่อมโยงคีย์ด้านบนทำงาน tmux คนอีกครั้งช่วยฉันสังคายนาสิ่งที่จะใช้ แต่ข้อผิดพลาดที่ใหญ่ที่สุดที่ฉันทำคือโฮสต์ที่ฉันบันทึกเนื้อหาไม่ใช่โฮสต์ที่ฉันใช้ tmux จากดังนั้นฉันจึงมองหาไฟล์ที่บันทึกไว้ในโฮสต์ที่ไม่ถูกต้อง ...
Cognitiaclaeves

16

หากคุณต้องการบางสิ่งที่คุณสามารถเรียกใช้ได้จากบรรทัดคำสั่ง (แทนที่จะใช้คีย์คำนำหน้า tmux ของคุณ) ให้ลองเรียกใช้:

tmux capture-pane -pS -1000000

หากคุณเรียกใช้และดูเหมือนว่าจะไม่ทำอะไรเลยนั่นเป็นเพราะมันแสดงผลออกมาเหมือนที่ปรากฏบนหน้าจอของคุณดังนั้นมันจึงดูเหมือนกัน

แน่นอนคุณสามารถไปป์เป็นไฟล์ได้ด้วย:

tmux capture-pane -pS -1000000 > file.out

ดูtmuxman page และค้นหาcapture-paneสิ่งต่าง ๆ ที่คุณสามารถทำได้ (เช่นลำดับการดักจับในกรณีที่คุณต้องการรักษาสีหรือระบุว่าคุณต้องการให้มีการเชื่อมโยงหลาย ๆ ภาพเมื่อไม่มีบรรทัดใหม่หรือไม่)


1
สิ่งนี้มีประโยชน์มากโดยเฉพาะอย่างยิ่งเมื่อคำตอบที่ยอมรับไม่ได้ผล
piojo

13

นี่คือปลั๊กอิน tmux ที่เปิดใช้งานสิ่งนี้:

https://github.com/tmux-plugins/tmux-logging

หลังจากที่คุณติดตั้งบันทึก scrollback prefix + alt-shift-pทั้งหมดที่มี


4

นี่เป็นเรื่องง่ายมาก เข้าสู่โหมดคำสั่งจากสื่อมวลชนแล้วprefix key :จากนั้นทำcapture-pane -S -<line number you want to dump> แล้วsave-buffer <filepath>

ไฟล์นั้นมีเอาต์พุตการเลื่อนกลับทั้งหมด คุณควรลบบัฟเฟอร์ในภายหลังเพื่อความปลอดภัย


1

ฉันจะเขียน 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'                        
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.