如何清除Tmux中的回滚缓冲区?
仅供参考,我通过Mac OS X Terminal应用程序使用Tmux。
这个问题一直困扰我很长一段时间。 这是我所想到的最好的。 把它放到你的.tmux.conf文件中:
bind -n Ck clear-history
这将ctrl-k绑定到tmux clear-history命令。 绑定后的-n使得它不需要发出tmux命令前缀(默认情况下是ctrl-b)。 我使用bash,所以ctrl-l已经在命令行上input了“clear”。 用这两个键,我得到一个很好的ctrl-l,ctrl-k组合,它将所有的滚动缓冲区移出屏幕(“清除”),然后删除所有的历史logging(tmux“clear-history”命令)。
它不如terminal,iTerm或Konsole的1键组合清除它,但这是一个比打字清晰历史更好的世界。
正如@ juanpaco所说的, clear-history
是清除回滚缓冲区的命令。
我会补充一点,我也喜欢在同一个命令中清除屏幕上的内容。 send-keys -R
一个send-keys -R
复位(清除)屏幕,所以我在我的.tmux.conf
使用以下.tmux.conf
bind-key b send-keys -R \; clear-history
这将清除屏幕和回滚缓冲区。
我发现使用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
无法从历史logging中清除屏幕上的当前文本 – 清除历史logging命令似乎在单独的线程中运行以发送密钥。
如果你想结合CTRL-L
加上清除历史logging,把它添加到你的~/.tmux.conf
:
bind u send-keys Cl \; run-shell "sleep .3s" \; clear-history
这甚至可以在你使用MySQL shell的情况下工作。
比大多数简单的方法,我创build了一个名为cls
的shell脚本,并在我想要清除屏幕和回滚缓冲区时运行它。
所有这一切是这样的:
CLS
clear; tmux clear-history;
我已经使用了以上的一些加上其他来源提出:
bind k send-keys Cu \; send-keys Ck \; send-keys " clear && tmux clear-history" \; send-keys "Enter" \; run-shell "sleep .3s" \; send-keys "Up" \; send-keys Cu
“clear && tmux clear-history”中的前导空格可防止将命令写入历史logging文件(假设您的shell设置为以这种方式对待前导空格; google“hist ignore space”+您的shell的名称以获得更多信息)。 我喜欢这个命令不会出现在我的历史logging中,因为这与terminal中的ctrl-k更加内联。
第一个发送键Cu和发送键Ck将清除当前在提示符处input的内容,以确保“清除&& tmux清除历史logging”成功(例如,如果在提示符下input了“ABCDEFG”您的光标在D和E之间,这确保了“ABCD clear && tmux clear-historyEFG”不会被发送到shell,这将会失败)。
发送键“Up”和最后一个发送键Cu清除你的shell内部历史logging中的最后一项。 即使是上面提到的尾部空间,炮弹的内部历史也会包含“清晰”的线条。 发送和Ctrl-U摆脱这一点。
最后,在iTerm中,我设置了ctrl-k映射到ctrl-a k(我的tmux前缀设置为ctrl-a),所以我可以键入ctrl-k,这是我多年来所做的所以。 我这样做,通过转到iTerm>首选项>configuration文件>键,并添加一个快捷方式发送hex代码“0x01 0x6B”。 这里有一个很好的文章,它提供了有关在tmux和iTerm中使用hex代码的更多信息: http : //tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
这几乎给了我ctrl-K与tmux。 唯一还是有点麻烦的是,没有tmux的真正的ctrl-k没有问题,如果你现在有提示键入的东西,并保留你在清除屏幕时input的内容。 如前所述,这种方法需要清除input内容,因此“清除…”命令不会失败。 但它是非常接近!
所以,我一直在使用plu的方法一段时间,但是我受够了它的限制(基本上,除非通过程序来理解它,否则通过的内容是毫无意义的)。
所以我对这个线程的不同答案进行了改进, 虽然很复杂,但这种方法可以同时使用shell 和其他命令 :
# ⌃K: Clears the current pane (from <https://stackoverflow.com/a/34162098>) bind-key -n Ck \ if-shell "test \"$(printf '#{pane_current_command}' | tail -c 2)\" = sh" \ "send-keys Cl ; run-shell 'sleep .3s' ; clear-history" \ "split-window -vp 100 ; clear-history -t ! ; kill-pane"
试试tail -f /private/var/log/system.log
或者其他东西!
注意事项:
这里有一个重要的注意事项:这是不可见的调整窗格被清除,如果它不是一个壳。 这可能触发在侦听SIGWINCH
es的某些命令行应用程序中调整行为的大小; 但我的推理是,这不是一个大问题,因为这些程序是你很可能不会试图“清除” 的程序 。
另外,shell引用的情况已经是一团糟了,embedded#{pane_current_command}
时候很容易变成一个,所以要小心,你可能不得不根据你的default-command
设置来修改它。
这同样适用于我testing匹配"sh"
命令的结尾; 如果你有一个类似/bin/bash --login
东西或者涉及到exec
一些复杂的命令 , 实际的命令可能不会以"sh"
结尾。 使用⌃B :
执行display-message '#{pane_current_command}'
如果你想看看什么是testing。
为什么不? bind -n Cl send-keys Cl
经过大量的研究和花费时间。 我在zsh和terminal.app上find了最好的方法
我使用prefix-c
来清除屏幕和prefix-C
来清除历史logging和滚动缓冲区,不留上面的行,因为我觉得很烦人。
没有Vim
# clear screen bind c send-keys 'Cl' # clear screen and history bind C send-keys -R \; send-keys Cl \; clear-history \; send-keys
用Vim
# 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 Cl \; clear-history \; send-keys
发现这在TMUX 2.6中效果最好,清除屏幕,回滚,但保持提示后显示。
使用Ctrl-L
bind-key -n Cl send-keys Cl \; send-keys -R \; clear-history
在控制台应用程序中使用Ctrl-L来重画屏幕。 我发现绑定到send-keys -R
,会导致箭头键在某些应用程序(例如vim,mc)中不能正常工作。
为了在控制台应用程序中保留重画function,我使用了:
bind-key -n Cl if-shell -F '#{alternate_on}' 'send-keys Cl' 'send-keys -R Cl; clear-history'
这要求tmux选项alternate-screen
处于打开状态(默认情况下)。