FYI ฉันใช้ Tmux ผ่านแอพ Terminal Mac OS X
FYI ฉันใช้ Tmux ผ่านแอพ Terminal Mac OS X
คำตอบ:
คำถามเดียวกันนี้รบกวนฉันมาระยะหนึ่งแล้ว นี่คือสิ่งที่ดีที่สุดที่ฉันคิดไว้ วางสิ่งนี้ลงในไฟล์. tmux.conf ของคุณ:
bind -n C-k clear-history
สิ่งนี้จะเชื่อม ctrl-k กับคำสั่ง clear-history ของ tmux -n after bind ทำให้คุณไม่ต้องออกคำนำหน้าคำสั่ง tmux (ctrl-b โดยค่าเริ่มต้น) ฉันใช้ bash ดังนั้น ctrl-l จึงเทียบเท่ากับการพิมพ์ "clear" ที่บรรทัดคำสั่ง ด้วยสองปุ่มเหล่านี้ฉันได้รับคำสั่ง ctrl-l, ctrl-k คอมโบซึ่งย้ายบัฟเฟอร์เลื่อนทั้งหมดออกจากหน้าจอ ("ชัดเจน") แล้วลบประวัติทั้งหมดนั้น (คำสั่ง tmux "ล้างประวัติ")
มันไม่ค่อยดีเท่าเทอร์มินัล, iTerm's หรือคอมโบ 1 คีย์ของ Konsole สำหรับการเคลียร์มัน แต่มันเป็นโลกที่ดีกว่าการพิมพ์ในประวัติศาสตร์ที่ชัดเจนตลอดเวลา
bind k send-keys "clear"\; send-keys "Enter"
เพื่อล้างส่วน แต่การใช้ในตัวctrl+l
เป็นเรื่องง่ายและclear-history
การกำจัดประวัติ scrollback เป็นส่วนเสริมที่ดี
ตามที่ @juanpaco ระบุไว้อย่างถูกต้องclear-history
เป็นคำสั่งเพื่อล้างบัฟเฟอร์การเลื่อนกลับ
ฉันจะเพิ่มที่ฉันต้องการที่จะล้างสิ่งที่อยู่บนหน้าจอในคำสั่งเดียวกัน การออกsend-keys -R
หน้าจอรีเซ็ต (ลบล้าง) ดังนั้นฉันจึงใช้สิ่งต่อไปนี้ใน.tmux.conf
bind-key b send-keys -R \; clear-history
เป็นการลบหน้าจอและบัฟเฟอร์การเลื่อน
send-keys
: "แฟล็ก -R ทำให้สถานะเทอร์มินัลถูกรีเซ็ต" คุณอาจต้องอัปเดต
bind -n C-l send-keys C-l \; clear-history
clear-history
คำสั่งกดCtrl+B
จากนั้นเริ่มคำสั่งด้วยเครื่องหมายโคลอน ( :
)
send-keys -R C-l \; clear-history
คุณสามารถรวมตัวนี้
ทุกคำตอบที่นี่พูดถึงการเพิ่มการเชื่อมโยงคีย์ใหม่
หากคุณต้องการทำในบางครั้งคุณไม่จำเป็นต้องทำแผนที่เลย ...
ค่าเริ่มต้นของคำนำหน้าเป็น <Ctrl-b>
เพียงพิมพ์<prefix>:
ในบานหน้าต่างที่เกี่ยวข้องจากนั้นพิมพ์clear-history
และกด Enter
หนึ่งในสิ่งที่ยอดเยี่ยมเกี่ยวกับ tmux คือคุณสามารถเรียกใช้คำสั่งใด ๆ เช่นนั้น ... หรือเรียกใช้งานในเชลล์ / สคริปต์เช่นtmux command
... หรือสร้างแป้นพิมพ์ลัดสำหรับพวกเขา
cle
จากนั้นเติมข้อความอัตโนมัติด้วย<tab>
ในครั้งแรกจากนั้นในครั้งที่สองใช้<up arrow>
เพื่อเข้าถึงรายการก่อนหน้า วิธีนี้มันค่อนข้างเร็ว
<Ctrl-b> the
c` ถูกตั้งค่าให้สร้างหน้าต่างใหม่
:
มันจะให้คุณโต้ตอบพร้อม
หากคุณต้องการรวมCTRL-L
กับประวัติย่อให้เพิ่มสิ่งนี้ใน~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
สิ่งนี้สามารถใช้งานได้หากคุณอยู่ใน MySQL shell เป็นต้น
tail -f some.log
ใช่มั้ย มีวิธีรวมctrl-Z
กับสิ่งนี้หรือไม่? สามารถดูเหมือนจะทำให้ถูกต้อง
ฉันพบว่าใช้send-keys -R
ช้าหน่อย - นี่เป็นอีกวิธีหนึ่งในการล้างหน้าจอและประวัติด้วยคำสั่งเดียว
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
การเรียก tmux ที่ซ้อนกันถูกใช้เป็นสิ่งที่ชัดเจนยิ่งขึ้น
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
ล้มเหลวในการล้างข้อความปัจจุบันของหน้าจอจากประวัติ - คำสั่งล้างประวัติดูเหมือนว่าจะทำงานในเธรดแยกต่างหากเพื่อส่งคีย์
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
วิธีที่ง่ายกว่ามากที่สุดฉันเพิ่งสร้างเชลล์สคริปต์ชื่อcls
แล้วเรียกใช้เมื่อใดก็ตามที่ฉันต้องการล้างหน้าจอและบัฟเฟอร์การเลื่อนกลับของฉัน
ทั้งหมดนี้คือ:
CLS
clear;
tmux clear-history;
พบว่าสิ่งนี้ทำงานได้ดีที่สุดใน TMUX 2.6 การล้างหน้าจอการเลื่อนย้อนกลับ
ใช้ Ctrl-L
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ctrl-L ใช้ในคอนโซลแอปพลิเคชันเพื่อวาดหน้าจอใหม่ ฉันพบว่าเมื่อผูกพันกับsend-keys -R
มันจะทำให้ปุ่มลูกศรทำงานไม่ถูกต้องในบางแอปพลิเคชัน (เช่น vim, mc)
เพื่อรักษาฟังก์ชันการวาดใหม่ในแอปพลิเคชันคอนโซลฉันใช้:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
สิ่งนี้ต้องการตัวเลือก tmux alternate-screen
ที่จะเปิด (ซึ่งเป็นค่าเริ่มต้น)
ฉันใช้แหล่งข้อมูลข้างต้นรวมทั้งแหล่งข้อมูลอื่นมาเพื่อ:
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
พื้นที่ว่างชั้นนำใน "clear && tmux clear-history" ป้องกันคำสั่งไม่ให้เขียนลงในไฟล์ประวัติ (หากคุณมีการตั้งค่าเชลล์ของคุณเพื่อจัดการช่องว่างนำหน้าด้วยวิธีนี้ google "hist ไม่สนใจช่องว่าง" + ชื่อเชลล์เพิ่มเติม ข้อมูล). ฉันชอบที่จะมีคำสั่งนี้ไม่ปรากฏในประวัติของฉันเนื่องจากนี่คือแบบอินไลน์กับ ctrl-k ในเทอร์มินัล
send-keys ตัวแรก Cu และ send-keys Ck จะล้างสิ่งที่พิมพ์อยู่ในพรอมต์เพื่อให้แน่ใจว่า "clear && tmux clear-history" สำเร็จ (เช่นถ้าคุณพิมพ์ "ABCDEFG" ที่พรอมต์และมี เคอร์เซอร์ของคุณระหว่าง D และ E ทำให้แน่ใจได้ว่า "ABCD clear && tmux clear-historyEFG" ไม่ได้ถูกส่งไปยังเชลล์ซึ่งจะล้มเหลว)
send-keys "Up" และ send-keys ตัวสุดท้าย Cu จะทำการล้างรายการสุดท้ายออกจากประวัติภายในของเชลล์ แม้จะมีช่องว่างต่อท้ายที่กล่าวถึงข้างต้นประวัติภายในของเชลล์จะรวมบรรทัด "clear ... " การส่งและ Ctrl-u กำจัดสิ่งนี้
สุดท้ายใน iTerm ฉันตั้ง ctrl-k เพื่อทำแผนที่ไปที่ ctrl-a k (ฉันมีคำนำหน้า tmux ของฉันตั้งไว้ที่ ctrl-a) ดังนั้นฉันสามารถพิมพ์ ctrl-k ซึ่งเป็นสิ่งที่มือของฉันต้องการทำจากหลายปีที่ผ่านมา ดังนั้น. ฉันทำสิ่งนี้โดยไปที่ iTerm> ค่ากำหนด> โปรไฟล์> ปุ่มและเพิ่มทางลัดเพื่อส่งรหัสฐานสิบหก "0x01 0x6B" มีบทความที่ดีที่นี่ซึ่งให้ข้อมูลเพิ่มเติมเกี่ยวกับการใช้รหัสฐานสิบหกกับ tmux และ iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
นั่นสวยมากให้ ctrl-k กับ tmux สิ่งเดียวที่ยังคงดีพอที่ฉันคือ ctrl-k จริงที่ไม่มี tmux จะไม่มีปัญหาหากคุณมีบางสิ่งที่พิมพ์ในพรอมต์และจะรักษาสิ่งที่คุณพิมพ์ในขณะที่ล้างหน้าจอ ตามที่กล่าวไว้วิธีการนี้ต้องล้างสิ่งที่พิมพ์ดังนั้นคำสั่ง "clear ... " จะไม่ล้มเหลว แต่มันก็ใกล้ดีจริงๆ!
ทำไมจะไม่ล่ะ? bind -n C-l send-keys C-l
-n C-l
โดยทั่วไปจะพูดว่า 'จับสิ่งนี้' แล้วคุณจะผ่านสิ่งนั้นไปทันที (กล่าวคือนี่คือไม่มีตัวเลือก) ... ประการที่สองความตั้งใจของคุณถูกปิดเนื่องจาก⌃L
ล้างหน้าจอไม่ใช่การเลื่อนกลับ: หากคุณกด⌃B [
แล้วเลื่อนขึ้นคุณจะเห็นว่าการเลื่อนทั้งหมดยังคงถูกบันทึกไว้ เป้าหมายของคำถามนี้คือการที่ชัดเจนว่า (tmux ของ) scrollback ไม่ขั้วที่มองเห็นได้
หลังจากการวิจัยและการใช้เวลามากมาย ฉันได้พบวิธีที่ดีที่สุดสำหรับฉันใน zsh และ terminal.app
ฉันใช้prefix-c
เพื่อล้างหน้าจอและprefix-C
เพื่อล้างประวัติและบัฟเฟอร์การเลื่อนและไม่ทิ้งบรรทัดข้างบนเพราะฉันคิดว่ามันน่ารำคาญ
# 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
สำหรับการแก้ไขอย่างรวดเร็วเพื่อล้างบานหน้าต่าง tmux แต่ละรายการคุณสามารถตั้งชื่อแทน ...
# Tmux Clear pane
alias tc='clear; tmux clear-history; clear'
ดังนั้นฉันจึงได้ใช้พลูวิธี 's จากข้างต้นในขณะที่ แต่ฉันได้รับการเลี้ยงดูขึ้นกับข้อ จำกัด ดังกล่าว (โดยทั่วไปที่⌃L
ผ่านเป็นความหมายเว้นแต่ประปาไปยังโปรแกรมที่เข้าใจมัน.)
ดังนั้นฉันได้ปรับปรุงวิธีการต่าง ๆ ในคำตอบต่าง ๆ ของหัวข้อนี้ แม้ว่าจะซับซ้อนวิธีนี้ใช้ได้กับทั้งเชลล์และคำสั่งอื่น ๆ :
# ⌃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"
ลองด้วยtail -f /private/var/log/system.log
หรือบางสิ่งบางอย่าง!
มีหมายเหตุสำคัญที่นี่: นี่คือการปรับขนาดบานหน้าต่างที่กำลังล้างข้อมูลอย่างชัดเจนถ้าไม่ใช่เชลล์ นี้สามารถก่อให้เกิดพฤติกรรมในบางโปรแกรมบรรทัดคำสั่งฟังสำหรับการปรับขนาดSIGWINCH
ES; แต่เหตุผลของฉันอยู่ที่นี้ไม่ได้เป็นปัญหาใหญ่เพราะผู้เป็นโปรแกรมที่คุณมีโอกาสมากที่จะไม่ได้พยายามที่จะ 'ชัดเจน' อยู่แล้ว
นอกจากนี้สถานการณ์การอ้างอิงเชลล์เป็นระเบียบอยู่แล้วและสามารถกลายเป็นสถานการณ์ที่ฝังตัวได้ง่ายขึ้น#{pane_current_command}
ดังนั้นโปรดระวังคุณอาจต้องแก้ไขสิ่งนี้ตามdefault-command
การตั้งค่าของคุณ
เช่นเดียวกับการทดสอบการสิ้นสุดของการจับคู่คำสั่ง"sh"
นั้น ถ้าคุณมีdefault-command
สิ่งที่ต้องการ/bin/bash --login
หรือสิ่งที่ซับซ้อนที่เกี่ยวข้องกับexec
การออกคำสั่งที่เกิดขึ้นจริงอาจจะไม่จบลงด้วย"sh"
; ใช้⌃B :
เพื่อดำเนินการdisplay-message '#{pane_current_command}'
ถ้าคุณต้องการดูสิ่งที่ถูกทดสอบ