FYI, tôi đang sử dụng Tmux thông qua ứng dụng Mac OS X Terminal.
FYI, tôi đang sử dụng Tmux thông qua ứng dụng Mac OS X Terminal.
Câu trả lời:
Câu hỏi tương tự này đã gây khó chịu cho tôi trong một thời gian khá dài. Đây là điều tốt nhất tôi nghĩ ra. Đặt phần này vào tệp .tmux.conf của bạn:
bind -n C-k clear-history
Điều này liên kết ctrl-k với lệnh xóa lịch sử tmux. -N sau khi liên kết làm cho nó để bạn không phải phát hành tiền tố lệnh tmux (ctrl-b theo mặc định). Tôi sử dụng bash, vì vậy ctrl-l đã thực hiện tương đương với việc gõ "xóa" trong dòng lệnh. Với hai phím này, tôi nhận được một tổ hợp ctrl-l, ctrl-k đẹp mắt, di chuyển tất cả bộ đệm cuộn ra khỏi màn hình ("xóa") và sau đó xóa tất cả lịch sử đó (lệnh "xóa lịch sử" của tmux).
Nó không hoàn toàn đẹp như các combo 1 phím của Terminal, iTerm hay Konsole để xóa nó, nhưng đó là một thế giới tốt hơn so với việc gõ vào lịch sử rõ ràng mọi lúc.
bind k send-keys "clear"\; send-keys "Enter"
phần xóa, nhưng sử dụng phần dựng sẵn ctrl+l
thì đơn giản hơn và clear-history
để thoát khỏi lịch sử cuộn lại là một bổ sung tốt.
Như @juanpaco đã nêu chính xác, clear-history
là lệnh xóa bộ đệm cuộn.
Tôi sẽ thêm rằng tôi cũng muốn xóa những gì trên màn hình trong cùng một lệnh. Phát hành send-keys -R
thiết lập lại (xóa) màn hình, vì vậy tôi sử dụng các mục sau trong.tmux.conf
bind-key b send-keys -R \; clear-history
Điều này sẽ xóa màn hình VÀ bộ đệm cuộn lại.
send-keys
: "Cờ -R khiến trạng thái đầu cuối được đặt lại." Bạn có thể chỉ cần cập nhật.
bind -n C-l send-keys C-l \; clear-history
clear-history
lệnh, nhấn Ctrl+B
và sau đó bắt đầu lệnh bằng dấu hai chấm ( :
).
send-keys -R C-l \; clear-history
.
Mỗi câu trả lời ở đây nói về việc thêm các ràng buộc quan trọng mới.
Nếu bạn chỉ muốn làm điều đó đôi khi bạn không cần một bản đồ nào cả ...
Tiền tố mặc định là <Ctrl-b>
Chỉ cần gõ <prefix>:
vào khung có liên quan và sau đó gõ clear-history
và nhấn enter.
Một trong những điều thú vị về tmux là bạn có thể chạy bất kỳ lệnh nào như vậy ... hoặc chạy chúng trong shell / script như tmux command
... hoặc tạo một phím tắt cho chúng.
cle
, sau đó tự động hoàn thành với <tab>
lần đầu tiên, sau đó sử dụng lần thứ hai <up arrow>
để truy cập mục nhập trước đó. Cách này khá nhanh.
<Ctrl-b> the
phím c` được đặt để tạo một cửa sổ mới.
:
nó sẽ đưa ra lời nhắc tương tác - đó là nơi bạn nhập 'c'
Nếu bạn muốn kết hợp CTRL-L
cộng với lịch sử rõ ràng, hãy thêm phần này vào ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Điều này thậm chí hoạt động nếu bạn đang ở trong một vỏ MySQL chẳng hạn.
tail -f some.log
, phải không? Có cách nào để kết hợp ctrl-Z
với điều này? Dường như có thể làm cho nó đúng.
Tôi thấy việc sử dụng send-keys -R
hơi chậm - đây là một cách khác để xóa màn hình và lịch sử chỉ bằng một lệnh
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Một cuộc gọi tmux lồng nhau được sử dụng như là rõ ràng hơn
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
không xóa văn bản hiện tại của màn hình khỏi lịch sử - lệnh xóa lịch sử dường như chạy trong một luồng riêng cho các phím gửi.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Cách đơn giản hơn hầu hết, tôi chỉ cần tạo một kịch bản shell được gọi cls
và chạy nó bất cứ khi nào tôi muốn xóa màn hình và bộ đệm cuộn lại.
Tất cả chỉ có thế này:
cls
clear;
tmux clear-history;
Ctrl-L được sử dụng trong các ứng dụng bảng điều khiển để vẽ lại màn hình. Tôi thấy rằng khi bị ràng buộc với send-keys -R
nó sẽ khiến các phím mũi tên không còn hoạt động chính xác trong một số ứng dụng (ví dụ: vim, mc).
Để giữ lại chức năng vẽ lại trong các ứng dụng bảng điều khiển, tôi đã sử dụng:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Điều này đòi hỏi tùy chọn tmux alternate-screen
được bật (theo mặc định).
Tôi đã sử dụng một số nguồn trên cộng với các nguồn khác để đưa ra:
bind k send-keys C-u \; send-keys C-k \; send-keys " clear && tmux clear-history" \; send-keys "Enter" \; run-shell "sleep .3s" \; send-keys "Up" \; send-keys C-u
Không gian hàng đầu trong "Clear && tmux Clear-history" ngăn lệnh được ghi vào tệp lịch sử (cung cấp cho bạn thiết lập shell của bạn để xử lý các khoảng trắng hàng đầu theo cách này; google "hist bỏ qua khoảng trắng" + tên của shell của bạn để biết thêm thông tin). Tôi muốn có lệnh này không hiển thị trong lịch sử của tôi vì đây là nội tuyến hơn với ctrl-k trong Terminal.
Khóa gửi đầu tiên Cu và khóa gửi Ck sẽ xóa bất cứ thứ gì hiện đang gõ tại dấu nhắc để đảm bảo rằng "xóa && tmux xóa lịch sử" thành công (ví dụ: nếu bạn đã gõ "ABCDEFG" tại dấu nhắc và có con trỏ của bạn giữa D và E, điều này đảm bảo rằng "ABCD xóa && tmux xóa lịch sửEFG" không được gửi đến trình bao, điều này sẽ thất bại).
Khóa gửi "Lên" và khóa gửi cuối cùng Cu xóa các mục cuối cùng khỏi lịch sử nội bộ của trình bao. Ngay cả với không gian dấu được đề cập ở trên, lịch sử bên trong của vỏ sẽ bao gồm dòng "xóa ...". Gửi lên và Ctrl-u thoát khỏi điều này.
Cuối cùng, trong iTerm, tôi đặt ctrl-k thành ánh xạ thành ctrl-a k (Tôi có tiền tố tmux của mình được đặt thành ctrl-a), vì vậy tôi có thể nhập ctrl-k, đó là điều mà tay tôi muốn làm từ rất nhiều năm làm vì thế. Tôi làm điều này, bằng cách truy cập iTerm> Preferences> Profiles> Keys và thêm một phím tắt để gửi mã hex "0x01 0x6B". Có một bài viết tuyệt vời ở đây cung cấp thêm thông tin về việc sử dụng mã hex với tmux và iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Điều đó khá nhiều mang lại cho tôi ctrl-k với tmux. Điều duy nhất vẫn còn khó chịu với tôi là ctrl-k thực sự không có tmux không có vấn đề gì nếu bạn hiện đang có một cái gì đó gõ vào dấu nhắc và sẽ giữ lại những gì bạn đã gõ trong khi xóa màn hình. Như đã đề cập, cách tiếp cận này cần phải xóa những gì đã gõ để lệnh "xóa ..." không thất bại. Nhưng nó khá gần!
tại sao không? bind -n C-l send-keys C-l
-n C-l
về cơ bản là nói 'hãy nắm bắt điều này', và sau đó bạn ngay lập tức vượt qua điều tương tự. (ví dụ: đây là một không-op.) ... Thứ hai, bạn dự định là tắt, bởi vì ⌃L
Clears màn hình , chứ không phải cuộn lại: nếu bạn nhấn ⌃B [
và sau đó di chuyển lên, bạn sẽ thấy rằng tất cả các scrollback vẫn ghi nhận; mục tiêu của câu hỏi này là để xóa cuộn đó (tmux), chứ không phải thiết bị đầu cuối có thể nhìn thấy.
Sau rất nhiều nghiên cứu và dành thời gian. Tôi đã tìm thấy cách tốt nhất cho tôi trên zsh và terminal.app
Tôi đang sử dụng prefix-c
để xóa màn hình và prefix-C
xóa lịch sử và bộ đệm cuộn và không để lại dòng nào ở trên vì tôi thấy khó chịu.
# clear screen
bind c send-keys 'C-l'
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
# check if the pane is running vim
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
# clear screen
bind c if-shell "$is_vim" "send-keys c" "send-keys 'C-l'"
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
Vì vậy, tôi đã sử dụng cách tiếp cận của plu từ trên cao trong một thời gian, nhưng tôi đã chán ngấy với những hạn chế của nó (về cơ bản, việc ⌃L
thông qua là vô nghĩa trừ khi được dẫn đến một chương trình hiểu nó.)
Vì vậy, tôi đã cải thiện các cách tiếp cận khác nhau trong các câu trả lời khác nhau cho chủ đề này; Mặc dù phức tạp, cách tiếp cận này hoạt động với cả shell và các lệnh khác :
# ⌃K: Clears the current pane (from <https://stackoverflow.com/a/34162098>)
bind-key -n C-k \
if-shell "test \"$(printf '#{pane_current_command}' | tail -c 2)\" = sh" \
"send-keys C-l ; run-shell 'sleep .3s' ; clear-history" \
"split-window -vp 100 ; clear-history -t ! ; kill-pane"
Hãy thử nó với tail -f /private/var/log/system.log
hoặc một cái gì đó!
Có một lưu ý quan trọng ở đây: đây là vô hình thay đổi kích thước khung bị xóa, nếu nó không phải là một vỏ. Điều này có thể kích hoạt hành vi thay đổi kích thước trong một số ứng dụng dòng lệnh nghe SIGWINCH
es; nhưng lý do của tôi là đây không phải là một vấn đề lớn, bởi vì đó là những chương trình mà bạn rất có thể sẽ không cố gắng 'xóa' bằng mọi cách .
Bên cạnh đó, tình hình vỏ trích dẫn đã là một mớ hỗn độn, và có thể dễ dàng trở thành nhiều hơn một khi nhúng #{pane_current_command}
, vì vậy hãy cẩn thận, bạn có thể phải sửa đổi này dựa trên của bạn default-command
thiết lập.
Điều tương tự cũng áp dụng cho thử nghiệm của tôi về việc kết thúc lệnh khớp đó "sh"
; nếu bạn có một default-command
cái gì đó giống /bin/bash --login
hoặc một cái gì đó phức tạp liên quan exec
, lệnh thực tế có thể không kết thúc bằng "sh"
; sử dụng ⌃B :
để thực thi display-message '#{pane_current_command}'
nếu bạn muốn xem những gì đang được thử nghiệm.