我想清除特定tmux窗格中的所有滚动历史。


当前回答

我发现使用send-keys - r有点慢-这里有另一种方法用一个命令清除屏幕和历史记录

bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"  

嵌套tmux调用的使用更为明显

“clear”\;send-keys“Enter”\;clear-history

未能从历史记录中清除屏幕的当前文本- 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选项的备用屏幕(默认情况下是这样)。

因此,我已经从上面使用了一段时间的plu方法,但我厌倦了它的局限性(基本上,传递的⌃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或其他东西!


警告:

这里有一个重要的注意事项:这是无形地调整正在清除的窗格的大小,如果它不是一个shell的话。这可以在一些命令行应用程序监听SIGWINCHes时触发调整大小行为;但我的理由是,这不是一个大问题,因为这些是你很可能不会试图“清除”的程序。

此外,shell引用的情况已经很混乱,并且在嵌入#{pane_current_command}时很容易变得更加混乱,所以要小心,您可能必须根据默认命令设置修改它。

这同样适用于我对命令末尾匹配“sh”的测试;如果你有一个默认的命令,比如/bin/bash——login或者一些复杂的命令,比如exec,实际的命令可能不会以“sh”结尾;使用⌃B:执行display-message '#{pane_current_command}'如果你想知道测试针对的是什么。

这里的每个答案都在谈论添加新的键绑定。

如果你只是偶尔想这样做,你根本不需要映射……

Prefix默认为<Ctrl-b>

只需在相关窗格中键入<prefix> +:,然后键入clear-history并按enter。

如果您在命令行上,可以在相关窗格中运行tmux clear-history,以达到同样的效果。

关于tmux的一个很酷的事情是,您可以像这样运行任何命令……或者像tmux命令一样在shell/脚本中运行它们…或者为他们做一个快捷键。

这个问题已经困扰我很久了。这是我能想到的最好的。把这个放到你的.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的一键组合来清除,但它比一直输入清除历史记录要好得多。