我想清除特定tmux窗格中的所有滚动历史。
这个问题已经困扰我很久了。这是我能想到的最好的。把这个放到你的.tmux.conf文件中:
bind -n C-k clear-history
这将ctrl-k绑定到tmux clear-history命令。bind后的-n使您不必发出tmux命令前缀(默认情况下是ctrl-b)。我使用bash,所以ctrl-l已经相当于在命令行输入“clear”。使用这两个键,我得到了一个很好的ctrl-l, ctrl-k组合,它将所有滚动缓冲区移出屏幕(“clear”),然后删除所有历史(tmux“clear-history”命令)。
它不像Terminal、iTerm或Konsole的一键组合来清除,但它比一直输入清除历史记录要好得多。
正如@juanpaco正确声明的那样,clear-history是清除滚动缓冲区的命令 我还要补充一点,我喜欢在同一个命令中清除屏幕上的内容。 发出send-keys -R将重置(清除)屏幕,因此我在.tmux.conf
clear-history
send-keys -R
.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
失败从历史记录中清除屏幕的当前文本- clear-history命令似乎在一个单独的线程中运行以发送key。
如果你想结合CTRL-L和clear-history,将这个添加到你的~/.tmux.conf:
CTRL-L
~/.tmux.conf
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
这甚至适用于MySQL shell。
我使用了上面的一些资料,再加上其他资料,得出了以下结论:
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”防止命令被写入历史文件(假设您的shell设置以这种方式处理前导空格;谷歌“hist忽略空格”+你的壳的名字,以获取更多信息)。我喜欢让这个命令不显示在我的历史记录中,因为这与终端中的ctrl-k更内联。
第一个发送键C-u和发送键C-k将清除当前在提示符下键入的任何内容,以确保“clear &&”tmux clear-history”是成功的(例如,如果你在提示符下输入了“ABCDEFG”,并将光标放在D和E之间,这将确保“ABCD clear &&”tmux clear-historyEFG”不会被发送到shell,这将失败)。
发送键“Up”和最后一个发送键C-u清除shell内部历史记录中的最后一项。即使使用上面提到的尾随空格,shell的内部历史记录也将包括“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。唯一让我感到困扰的是,如果您当前在提示符下输入了一些内容,那么没有tmux的真正ctrl-k没有问题,并且在清除屏幕时将保留您键入的内容。如前所述,这种方法需要清除输入的内容,这样“clear…”命令才不会失败。但它非常接近!
为什么不呢?bind -n C-l send-keys C-l
bind -n C-l send-keys C-l
因此,我一直在使用并不的方法从上面一段时间,但我厌倦了它的局限性(基本上,传递的⌃L是没有意义的,除非通过管道传递给一个理解它的程序。)
⌃L
所以我在这个线程的不同答案中改进了各种方法;虽然复杂,但此方法适用于shell 和其他命令:
# ⌃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或其他东西试试吧!
tail -f /private/var/log/system.log
这里有一个重要的注意事项:如果它不是shell,这是无形的调整窗格被清除。这可以在一些命令行应用程序中触发调整大小的行为,监听SIGWINCHes;但我的理由是,这不是一个大问题,因为这些是程序,你很可能不会试图“清除”无论如何。
SIGWINCH
此外,shell引用的情况已经很混乱了,并且在嵌入#{pane_current_command}时很容易变成更多的,所以要小心,你可能必须根据你的default-command设置修改它。
#{pane_current_command}
default-command
这同样适用于我对匹配"sh"的命令末尾的测试;如果你有一个类似/bin/bash --login的default-command,或者包含exec的复杂的实际的命令可能不会以"sh"结尾;如果你想知道测试的对象是什么,使用⌃B :来执行display-message '#{pane_current_command}'。
"sh"
/bin/bash --login
exec
⌃B :
display-message '#{pane_current_command}'
比大多数更简单的方法,我只是创建了一个名为cls的shell脚本,并在我想清除屏幕和滚动缓冲区时运行它。
cls
这一切是这样的:
clear; tmux clear-history;
经过大量的调查和时间。我已经在zsh和terminal.app上找到了最适合我的方式
我使用prefix-c来清除屏幕和prefix-C来清除历史记录和滚动缓冲区,上面没有留下任何行,因为我发现它很烦人。
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 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打开(默认是打开)。
alternate-screen
这里的每个答案都在谈论添加新的键绑定。
如果你只是偶尔想这样做,你根本不需要映射……
Prefix默认为<Ctrl-b>
<Ctrl-b>
只需在相关窗格中键入<prefix> + :,然后键入clear-history并按enter。
<prefix>
:
如果你在命令行上,你可以在相关窗格中运行tmux clear-history来达到同样的效果。
tmux clear-history
关于tmux的一个很酷的事情是,您可以像这样运行任何命令……或者在shell/script中运行它们,比如tmux command…或者为他们做一个快捷键。
tmux command
为了快速清除单个tmux窗格,你可以设置一个别名…
# Tmux Clear pane alias tc='clear; tmux clear-history; clear'
如果您希望完全清除窗格,另一种选择是暂时将窗格调整为一行,清除历史记录,然后将其调整回来。这应该可以用一个tmux命令链无闪烁地工作。其优点是无论窗格中运行的是什么程序,它都可以正常工作。当然,这使得shell脚本逻辑更加复杂。
bind-key -n F11 run " if [[ #{window_panes} == "1" ]] ; then tmux send-keys C-l; sleep 0.1 ; tmux clear-history ; else restored_height=$((#{pane_height} + #{pane_at_bottom})); tmux resize-pane -y 1 \\; clear-history \\; resize-pane -y \${restored_height} ; fi "
如果你用clear清除你的屏幕,你可以检查是否设置了TMUX,并相应地创建一个别名。
clear
TMUX
把这个放在你的。bashrc中:
if [[ $TMUX ]]; then alias clear='clear && tmux clear-history' fi
如果你在OSX上用Iterm挣扎: