ฉันจะค้นหาภายในบัฟเฟอร์เอาต์พุตของเชลล์ tmux ได้อย่างไร


180

ฉันทำงานนี้ไม่ได้ ฉันจะค้นหาบัฟเฟอร์ของ tmux shell ได้อย่างไร?


1
รุ่นใดของtmux( tmux -V)? ฉันเชื่อว่านี่ถูกเพิ่มเข้ามาในเวอร์ชั่น 0.9
Dennis Williamson

@Dennis มันคือ 1.3-1
NES

1
การค้นหาเวอร์ชันที่ใช้tmux -Vงานได้ในเวอร์ชันที่ใหม่กว่าเท่านั้น ใน Ubuntu / Debian คุณสามารถทำได้: dpkg -l | grep tmux
Niels Bom

คำตอบ:


275

ค้นหาโหมดคัดลอก

ต้องการค้นหาในtmuxบัฟเฟอร์ประวัติศาสตร์หน้าต่างปัจจุบันกดCtrl- เพื่อป้อนb [copy mode

หากคุณกำลังใช้ emacs ปุ่มลัด (เริ่มต้น) กดCtrl- จากนั้นพิมพ์สตริงเพื่อค้นหาและกดs Enterกดnเพื่อค้นหาสตริงเดิมอีกครั้ง กดShift- nเพื่อค้นหาแบบย้อนกลับ กดสองครั้งเพื่อออกจากEscape copy modeคุณสามารถใช้Ctrl- rเพื่อค้นหาในทิศทางย้อนกลับ ทราบว่าตั้งแต่tmuxอยู่ในการควบคุมของแป้นพิมพ์ในcopy mode, Ctrl- sทำงานโดยไม่คำนึงถึงstty ixonการตั้งค่า (ซึ่งผมชอบที่จะได้เป็นstty -ixonเพื่อเปิดใช้งานไปข้างหน้าในการค้นหาทุบตี)

หากคุณกำลังใช้ผูกที่สำคัญ vi ( Ctrl- b:set-window-option -g mode-keys vi) กดแล้วพิมพ์สตริงเพื่อค้นหาและกด/ Enterกดnเพื่อค้นหาสตริงเดิมอีกครั้ง กดShift- nเพื่อค้นหาแบบย้อนกลับเช่นเดียวกับในโหมด emacs กดสองครั้งเพื่อออกจากq copy modeคุณสามารถใช้?เพื่อค้นหาในทิศทางย้อนกลับ

พบหน้าต่าง

หากคุณต้องการที่จะเปลี่ยนไปยังหน้าต่างขึ้นอยู่กับสิ่งที่ปรากฏอยู่ในนั้น (นี้ยังรวมถึงชื่อหน้าต่างและชื่อ แต่ไม่ประวัติ), (เริ่มต้นด้วยมากกว่าหนึ่งหน้าต่างเปิด) กดCtrl- จากนั้นพิมพ์สตริงเพื่อค้นหาและกดb f Enterคุณจะเปลี่ยนเป็นหน้าต่างที่มีข้อความนั้นหากพบ หากมีมากกว่าหนึ่งหน้าต่างตรงกันคุณจะเห็นรายการให้เลือก


3
ฉันจะกำหนดสไตล์การผูกได้อย่างไร (emacs vs vi)
Daniel Que

2
@DanielQue: ดูที่หน้า tmux และค้นหา "mode-keys" และ "status-keys" เหล่านี้คือคำสั่งย่อยที่อนุญาตให้คุณตั้งค่าสไตล์การเชื่อม อีกวิธีหนึ่งก็อาจจะง่ายในการตั้งค่าตัวแปรสภาพแวดล้อม ( EDITORหรือVISUAL) tmuxกับรูปแบบที่คุณต้องการก่อนที่จะเริ่ม
Dennis Williamson

6
ขอบคุณฉันได้ไปทำงานกับในของฉันset-window-option -g mode-keys vi .tmux.confแต่ฉันอยากรู้เกี่ยวกับทางเลือกตัวแปรสภาพแวดล้อมและไม่สามารถใช้งานได้ มันเป็นตัวแปรสภาพแวดล้อมของเชลล์หรือตัวแปรสภาพแวดล้อม tmux ที่ต้องตั้งค่าในไฟล์ conf หรือไม่?
Daniel Que

2
@DanielQue: ตัวแปรสภาพแวดล้อมของเชลล์ มันจะต้องมีการส่งออกหรือวางไว้ในสภาพแวดล้อมของ tmux เช่นนี้:VISUAL=vi tmux
Dennis Williamson

1
โปรดทราบว่ายังไม่มีการค้นหา regex นี่เป็นปัญหาแบบเปิดที่sourceforge.net/p/tmux/tickets/9
Elijah Lynn

7

เข้าสู่โหมดคัดลอกและเริ่มค้นหาในครั้งเดียว

bind-key / copy-mode \; send-key ?

ช่วยให้คุณทำเพียงแค่:

 Ctrl + B /

และเริ่มพิมพ์ข้อความค้นหา

ดัมพ์เป็นไฟล์และใช้เป็นกลุ่ม

เมื่อสิ่งต่าง ๆ มีส่วนร่วมมากขึ้นฉันแค่ต้องการใช้เครื่องมือแก้ไขที่เหมาะสม: https://unix.stackexchange.com/questions/26548/write-all-tmux-scrollback-to-a-file

bind-key P 'capture-pane' \; capture-pane -S - \; save-buffer /tmp/tmux \; delete-buffer

ตอนนี้Pทิ้งบัฟเฟอร์ไปยังไฟล์แล้วฉันก็:

vim /tmp/tmux

ทดสอบใน tmux 2.6


ฉันจะสร้างพรอมต์นี้สำหรับชื่อไฟล์ได้อย่างไร (ดังนั้นฉันไม่ต้องใช้รหัสฮาร์ดโค้ด/tmp/tmux)?
Peeyush Kushwaha

@ PeeyushKushwaha ขออภัย แต่ tmux fu ของฉันไม่ดีฉันต้อง google ให้ฉันรู้ว่าถ้าคุณพบมัน
Ciro Santilli 新疆改造中心法轮功六四事件

1

คุณสามารถใช้เสียงเรียกเข้าเพื่อดู / แก้ไข / ค้นหา / บันทึกล็อกหน้าจอพับล็อกที่แต่ละการแจ้งเตือนทุบตี:

tmux capture-pane -pS -1000000 |
  vim +":setl fen fdm=expr fde=getline(v:lnum)=~'^\\\\S\\+\\\\$\\\\s'?'>1':1"  -  

ปรับ regex ตามคำแนะนำของคุณใช้แบ็กสแลชสี่รายการสำหรับแต่ละแบ็กสแลชใน regex

หรือใส่ฟังก์ชั่นเป็นกลุ่มใน ~ / .vimrc:

command!           MoshFoldTmuxLog :setl fen fdm=expr
  \   fde=getline(v:lnum)=~'^\\S\\+\\$\\s'?'>1':1 

และใน ~ / .bashrc เพิ่มวันที่ในพรอมต์หากคุณมีบันทึกจำนวนมากเพื่อค้นหา เช่น

PS1='\u@\h:\w:\D{%F-%T}$?:\$ ' # user-host-pwd-date-time-errno 
alias tmux-log='tmux capture-pane -pS -1000000 | vi +MoshFoldTmuxLog -'         

0

นี่เป็นวิธีแก้ปัญหาที่ฉันพบ

คุณสามารถปรับเปลี่ยนพา ธ เป้าหมายและชื่อไฟล์ได้เช่นกัน:

# Save screen content to file
bind p command-prompt -p 'Save history to:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

หลังจากโหลดไฟล์ tmux config อีกครั้งคุณสามารถกดprefix pในกรณีของฉันCtrl+a p คุณสามารถเปลี่ยนbind pเป็นชุดคีย์ที่คุณต้องการ

ฉันคนแรกไม่ทำงานเพราะฉันเขียนทับbind pในอีกบรรทัดหนึ่งดังนั้นฉันจึงแสดงความคิดเห็นออกมา

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