Viết tất cả các cuộn ngược lại vào một tập tin


194

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:


52

Điều này phụ thuộc vào giá trị history-limitmà 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-keystùy chọn bạn thích, vi hoặc emacs. man tmuxcó 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.


2
Đây là vấn đề ở việc dán tốt nhất vào chế độ chèn trong Vim có tất cả các loại vấn đề, ví dụ như khi bạn bật thụt lề tự động. Tôi không bao giờ có được điều này để làm việc để tôi hài lòng.
Konrad Rudolph

13
Nếu bạn sử dụng :set pastetrong 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.
tlunter 4/2/2015

@tlunter mẹo hay!
jasonwryan 4/2/2015

Điều này có thể được thực hiện với các ràng buộc chính mặc định?
daveloyall

@daveloyall Tất nhiên, chỉ cần không sử dụng các tùy chọn keybind tôi đưa vào từ .tmux.conf...
jasonwryan

224

Đố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ế 3000bằ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ế filenamebằng bất cứ thứ gì bạn muốn.

(Theo mặc định prefixctrl + b.)


14
save-buffer filename.txtdườ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ê
MohamedEzz

15
và đừng quên rằng MINUS trước << số lượng bộ đệm-dòng-bạn-muốn-tiết kiệm >>
Yordan Georgiev

9
Đây là câu trả lời tốt nhất ở đây. Cảm ơn bạn rất nhiều.
Jesse Atkinson

7
Vâng, bạn thắng. Đây phải là câu trả lời hàng đầu.
lời giới thiệu

1
+ n> 1 Sau khi đăng nhập vào upvote, có vẻ như đây là lần thứ hai câu trả lời này hữu ích với tôi. XD
L0j1k

159

Với tmux 1.5, capture-panelệnh chấp nhận -S-Echỉ đị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ó.


1
Bạn có thể đang chạy tmux 1.3; bạn có thể sử dụng tmux server-info | head -1để xem phiên bản của bạn. tmux -Vhoạt động trong tmux * 1.4 trở lên.
Chris Johnsen

1
Đây là một trong những lệnh tmux hữu ích nhất mà tôi đã tìm thấy.
kenny

1
Và nếu bạn đã ở trong cửa sổ tmux của mình và không muốn khởi động lại, chỉ cần thực hiệ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.
Ali

1
@BradenBest Một tiền tố SI cần được gắn vào một đơn vị. Cả "32Ki" hay "32K" đều không hợp lệ. Đừng quên rằng chữ hoa K không phải là tiền tố SI. Công việc tốt đẹp đứng về phía các giáo viên gieo rắc rối và nhận sai.
Alexanderr Dubinsky

1
@BradenBest Tiền tố nhị phân gieo rắc sự nhầm lẫn vì 1 MB từng có nghĩa chính xác, nhưng bây giờ nó có hai nghĩa. Tồi tệ hơn, ý nghĩa thập phân là vô dụng đối với ngành CNTT, ngoại trừ các nhà sản xuất lưu trữ sử dụng nó để tiếp thị sai. Sự nhầm lẫn này đã được bắt đầu bởi các giáo viên đã từ chối thực tế. Nếu bản thân bạn không phải là một người bán hàng như vậy, thì tôi xin lỗi vì giọng điệu của tôi và kêu gọi bạn xem xét lại sự nhiệt tình của bạn đối với tiền tố nhị phân.
Alexanderr Dubinsky

19

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).

  1. Vào chế độ chọn: Prefix+ [.
  2. Bắt đầu lựa chọn : Space.
  3. Làm nổi bật văn bản cần thiết bằng cách sử dụng điều hướng vim (ví dụ: sử dụng các phím mũi tên hoặc nhấn ggđể bắt đầu lịch sử đầu ra).
  4. Thực tế sao chép trong clipboard nội bộ bằng cách sử dụng Enter. Bạn sẽ được thoát khỏi chế độ sao chép.
  5. Mở bất kỳ tệp nào bằng vim (có thể trên tab tmux mới) và dán nội dung bạn đã sao chép trước khi sử dụng Prefix+ ].
  6. Sau đó, bạn có thể thực hiện cat của tệp đó hoặc sử dụng đầu ra như thế nào bạn cần.

man tmux đã giúp tôi sắp xếp rằng tmux của tôi đang ở chế độ emacs, vì vậy không có ràng buộc phím nào ở trên hoạt động. Người đàn ông tmux, một lần nữa, đã giúp tôi sắp xếp những gì để sử dụng. Nhưng sai lầm lớn nhất mà tôi mắc phải là máy chủ lưu trữ nội dung mà tôi đã lưu không phải là máy chủ lưu trữ mà tôi đang chạy tmux từ đó, vì vậy tôi tiếp tục tìm kiếm tệp đã lưu trên máy chủ lưu trữ sai ...
Cognitiaclaeves

16

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 tmuxtrang hướng dẫn và tìm kiếm capture-panethê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)


1
Điều này rất hữu ích, đặc biệt vì câu trả lời được chấp nhận không còn hoạt động.
piojo


4

Điều này thực sự rất dễ dàng. Vào chế độ lệnh bằng cách nhấn prefix keysau đó :. Sau đó làm capture-pane -S -<line number you want to dump> sau đósave-buffer <filepath>

Tập tin đó chứa tất cả các đầu ra cuộn lại. Bạn nên xóa bộ đệm sau đó vì lý do an toàn.


1

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