Làm cách nào tôi có thể tìm kiếm trong bộ đệm đầu ra của trình bao tmux?


180

Tôi không thể làm việc này. Làm thế nào tôi có thể tìm kiếm bộ đệm của một vỏ tmux?


1
Phiên bản nào của tmux( tmux -V)? Tôi tin rằng điều này đã được thêm vào trong phiên bản 0.9.
Dennis Williamson

@Dennis là 1.3-1
NES

1
Tìm phiên bản với tmux -Vcác tác phẩm chỉ trong các phiên bản sau. Trong Ubuntu / Debian bạn có thể làm: dpkg -l | grep tmux
Niels Bom

Câu trả lời:


275

chế độ sao chép tìm kiếm

Để tìm kiếm trong tmuxbộ đệm lịch sử cho cửa sổ hiện tại, nhấn Ctrl- b [để nhập copy mode.

Nếu bạn đang sử dụng các ràng buộc phím emacs (mặc định), hãy nhấn Ctrl- ssau đó nhập chuỗi để tìm kiếm và nhấn Enter. Nhấn nđể tìm kiếm cùng một chuỗi một lần nữa. Nhấn Shift- nđể tìm kiếm ngược. Nhấn Escapehai lần để thoát copy mode. Bạn có thể sử dụng Ctrl- rđể tìm kiếm theo hướng ngược lại. Lưu ý rằng vì tmuxnó nằm trong sự kiểm soát của bàn phím copy mode, Ctrl- shoạt động bất kể stty ixoncài đặt (mà tôi muốn có stty -ixonđể kích hoạt tìm kiếm chuyển tiếp trong Bash).

Nếu bạn đang sử dụng các ràng buộc phím vi ( Ctrl- b:set-window-option -g mode-keys vi), hãy bấm /rồi nhập chuỗi để tìm kiếm và nhấn Enter. Nhấn nđể tìm kiếm cùng một chuỗi một lần nữa. Nhấn Shift- nđể tìm kiếm ngược như trong chế độ emacs. Nhấn qhai lần để thoát copy mode. Bạn có thể sử dụng ?để tìm kiếm theo hướng ngược lại.

cửa sổ tìm

Nếu bạn muốn chuyển sang một cửa sổ dựa trên một cái gì đó được hiển thị trong đó (cái này cũng bao gồm tên và tiêu đề của cửa sổ nhưng không phải là lịch sử), (bắt đầu với nhiều hơn một cửa sổ mở) nhấn Ctrl- b fsau đó nhập chuỗi để tìm kiếm và nhấn Enter. Bạn sẽ được chuyển sang một cửa sổ chứa văn bản đó nếu nó được tìm thấy. Nếu có nhiều cửa sổ khớp, bạn sẽ thấy một danh sách để chọn.


3
Làm thế nào tôi có thể thiết lập phong cách ràng buộc? (emacs vs vi)
Daniel Que

2
@DanielQue: Hãy xem trang man tmux và tìm kiếm "phím chế độ" và "phím trạng thái". Đó là những lệnh phụ cho phép bạn đặt kiểu liên kết. Thay phiên, có thể đơn giản hơn để đặt biến môi trường ( EDITORhoặc VISUAL) thành kiểu bạn muốn trước khi bắt đầu tmux.
Dennis Williamson

6
Cảm ơn, tôi đã nhận nó để làm việc với set-window-option -g mode-keys vitôi .tmux.conf. Nhưng tôi đã tò mò về sự thay thế của môi trường và không thể làm cho nó hoạt động được. Đây có phải là biến môi trường shell hay biến môi trường tmux phải được đặt trong tệp conf không?
Daniel Que

2
@DanielQue: Một biến môi trường shell. Nó sẽ cần phải được xuất khẩu hoặc đặt trong môi trường của tmux như thế này:VISUAL=vi tmux
Dennis Williamson

1
Cũng lưu ý rằng chưa có tìm kiếm regex nào, đây là một vấn đề mở trên đó sourceforge.net/p/tmux/tickets/9
Elijah Lynn

7

Vào chế độ sao chép và bắt đầu tìm kiếm trong một lần

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

cho phép bạn làm chỉ:

 Ctrl + B /

và bắt đầu nhập cụm từ tìm kiếm.

Kết xuất tập tin và sử dụng vim

Khi mọi thứ liên quan nhiều hơn, tôi chỉ muốn sử dụng một trình soạn thảo thích hợp: 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

Bây giờ kết Pxuất bộ đệm vào một tập tin, và sau đó tôi chỉ:

vim /tmp/tmux

Đã thử nghiệm trong tmux 2.6.


Làm cách nào để tạo dấu nhắc này cho tên tệp (vì vậy tôi không phải mã hóa cứng /tmp/tmux)?
Peeyush Kushwaha

@PeeyushKushwaha xin lỗi nhưng tmux fu của tôi không tốt lắm, tôi phải google, cho tôi biết nếu bạn tìm ra nó.
Ciro Santilli 新疆 心 心

1

Bạn có thể sử dụng vim để xem / chỉnh sửa / tìm kiếm / lưu nhật ký màn hình, gấp nhật ký tại mỗi dấu nhắc bash:

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

Điều chỉnh regex theo lời nhắc của bạn, sử dụng bốn dấu gạch chéo ngược cho mỗi dấu gạch chéo ngược trong regex.

Hoặc đặt hàm vim trong ~ / .vimrc:

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

Và trong ~ / .bashrc thêm ngày vào dấu nhắc, nếu bạn có nhiều nhật ký để tìm kiếm. ví dụ

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

0

Đây là một giải pháp tôi tìm thấy.

Bạn cũng có thể sửa đổi đường dẫn đích và tên tệp:

# 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'

Sau khi tải lại tệp cấu hình tmux, bạn có thể nhấn prefix ptrong trường hợp của tôi Ctrl+a p Bạn có thể thay đổi bind pthành tổ hợp phím ưa thích của mình.

Đầu tiên của tôi không hoạt động vì tôi đã ghi đè lên bind pmột dòng khác vì vậy tôi chỉ nhận xét điều đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.