Làm cách nào tôi có thể viết tất cả các cuộn ngược lại trong một phiên tmux vào một tệp?
capture-panel
có thể lấy màn hình hiện tại, nhưng không phải toàn bộ cuộn lại.
Làm cách nào tôi có thể viết tất cả các cuộn ngược lại trong một phiên tmux vào một tệp?
capture-panel
có thể lấy màn hình hiện tại, nhưng không phải toàn bộ cuộn lại.
Câu trả lời:
Điều này phụ thuộc vào giá trị history-limit
mà bạn đã đặt trong .tmux.conf
- mặc định là 2000; nếu bạn muốn chụp nhiều hơn, bạn sẽ cần đặt rõ ràng số lượng dòng.
Để chụp toàn bộ cuộn ngược, hãy vào chế độ sao chép, chọn toàn bộ cuộn ngược lại và kéo nó vào bộ đệm, sau đó dán nó vào tệp của bạn.
Cách bạn thực hiện điều này sẽ phụ thuộc vào mode-keys
tùy chọn bạn thích, vi hoặc emacs. man tmux
có một bảng hữu ích mô tả các khóa tương ứng.
Tôi có những điều sau đây .tmux.conf
để đơn giản hóa điều này:
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
Quá trình để chụp toàn bộ cuộn lại là:
PrefixEsc : để vào chế độ sao chép
v : để bắt đầu lựa chọn hình ảnh (giả sử bạn đã ở dưới cùng của màn hình)
gg : để chụp mọi thứ trong cuộn lại
y : để kéo nó vào bộ đệm
Prefixc : mở một cửa sổ tmux khác
vim scrollback.txt
i : nhập chế độ chèn trong vim
Prefixp : dán vào tập tin
Ngoài ra còn có một câu trả lời ở đây mô tả cách sao chép bộ đệm vào một tệp tạm thời bằng cách sử dụngxsel
có thể hữu ích.
:set paste
trong vim, vim sẽ bỏ qua việc thêm thụt lề tự động hoặc bất kỳ phím bấm dựa trên chèn nào.
.tmux.conf
...
Đối với những người tìm kiếm một câu trả lời đơn giản, chỉ cần sử dụng prefix+ :, sau đó nhập capture-pane -S -3000
+ return(Thay thế 3000
bằng nhiều dòng bạn muốn lưu.) Điều này sao chép các dòng đó vào bộ đệm.
Sau đó, để lưu bộ đệm vào một tệp, chỉ cần sử dụng prefix+ :một lần nữa và nhập save-buffer filename.txt
+ return, thay thế filename
bằng bất cứ thứ gì bạn muốn.
(Theo mặc định prefixlà ctrl + b.)
save-buffer filename.txt
dường như lưu tệp trong /
, không phải trong pwd
(thư mục hiện tại). Thay vào đó, tôi đã cung cấp một đường dẫn tệp tuyệt đối và nó hoạt động như một bùa mê
Với tmux 1.5, capture-pane
lệnh chấp nhận -S
và -E
chỉ định các dòng bắt đầu và kết thúc của việc chụp; giá trị âm có thể được sử dụng để xác định các dòng từ lịch sử. Khi bạn có dữ liệu trong bộ đệm, bạn có thể lưu nó với save-buffer
.
Dưới đây là một ví dụ ràng buộc (phù hợp với .tmux.conf
) kết thúc tất cả bằng một dấu nhắc cho tên tệp:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Điều này ghi lại (tối đa) 32768 dòng lịch sử cộng với các dòng hiện được hiển thị. Bắt đầu với tmux 1.6, bạn có thể sử dụng các số xuống INT_MIN nếu ngăn của bạn có lịch sử sâu hơn các dòng 32Ki (thường lên đến 2Gi dòng). Bắt đầu từ tmux 2.0, bạn có thể sử dụng capture-pane -S -
để bắt đầu từ khi bắt đầu lịch sử, tức là không có số âm lớn, được mã hóa cứng).
Lưu ý: Số lượng dòng trong tệp đã lưu sẽ không luôn luôn bằng giới hạn lịch sử của khung cộng với chiều cao của nó.
Khi bộ đệm lịch sử của một cửa sổ đầy, tmux sẽ loại bỏ 10% dòng cũ nhất thay vì chỉ loại bỏ một dòng. Điều này có nghĩa là độ sâu lịch sử hiệu quả của một cửa sổ đôi khi sẽ thấp đến 90% giới hạn được cấu hình của nó.
tmux server-info | head -1
để xem phiên bản của bạn. tmux -V
hoạt động trong tmux * 1.4 trở lên.
[PrefixKey] :
để đến dòng lệnh tmux, sau đó dán toàn bộ dòng, sau đó bạn chỉ cần thực hiện [Prefix] P
đó là viết hoa P và bạn sẽ ổn.
Tôi đã có các ràng buộc khóa tiêu chuẩn có vẻ hơi khác so với câu trả lời của @ jasonwryan và không thay đổi bất cứ điều gì trong cấu hình.
Dưới đây là công thức làm việc cho tôi. Có thể bạn sẽ thấy hữu ích nếu bạn không muốn thực hiện bất kỳ thay đổi nào trong cấu hình tmux và chỉ muốn nhanh chóng sao chép một số cuộn ngược lại.
Prefix== Ctrl+btrong tmux của tôi (tmux 1.6, debian 7).
Nếu bạn muốn một cái gì đó bạn có thể chạy từ dòng lệnh (thay vì sử dụng các khóa tiền tố tmux của bạn), hãy thử chạy:
tmux capture-pane -pS -1000000
Nếu bạn chạy nó và dường như không làm gì cả, đó là vì nó xuất ra chính xác những gì chỉ có trên màn hình của bạn, vì vậy nó trông giống nhau.
Tất nhiên, bạn cũng có thể chuyển nó thành một tệp:
tmux capture-pane -pS -1000000 > file.out
Xem tmux
trang hướng dẫn và tìm kiếm capture-pane
thêm những thứ bạn có thể làm (như chụp các chuỗi thoát trong trường hợp bạn muốn giữ màu hoặc chỉ định xem bạn có muốn nối nhiều dòng trực quan khi chúng không chứa một dòng mới không)
Đây là một plugin tmux cho phép điều này:
https://github.com/tmux-plugins/tmux-logging
Sau khi bạn cài đặt nó, lưu toàn bộ cuộn lại với prefix + alt-shift-p
.
Làm cách nào tôi có thể viết tất cả các cuộn ngược lại trong một phiên tmux vào một tệp?
Tôi sử dụng điều này trong ~ / .tmux.conf của tôi và bây giờ khi tôi thoát khỏi vỏ đang chạy, đầu ra khung được lưu vào tệp nhật ký duy nhất:
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'