我想清除特定tmux窗格中的所有滚动历史。
当前回答
如果你在OSX上用Iterm挣扎:
其他回答
这个问题已经困扰我很久了。这是我能想到的最好的。把这个放到你的.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的一键组合来清除,但它比一直输入清除历史记录要好得多。
为什么不呢?bind -n C-l send-keys C-l
比大多数更简单的方法是,我只创建了一个名为cls的shell脚本,并在我想清除屏幕和滚动缓冲区时运行它。
这一切是这样的:
cls
clear;
tmux clear-history;
正如@juanpaco正确指出的那样,clear-history是清除滚动缓冲区的命令。 我还要补充一点,我喜欢在同一个命令中清除屏幕上的内容。 发出一个send-keys -R会重置(清除)屏幕,所以我在.tmux.conf中使用了下面的代码
-R \;clear-history
这将清除屏幕和滚动缓冲区。
因此,我已经从上面使用了一段时间的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}'如果你想知道测试针对的是什么。
推荐文章
- 我如何重命名一个窗格在tmux?
- Git显示“警告:永久添加到已知主机列表”
- Docker- compose无法连接到Docker Daemon
- 如何复制文件跨计算机使用SSH和MAC OS X终端
- 崇高的文本从命令行
- Git bash错误:无法fork子进程:没有可用的终端(-1)
- 使用grep删除空行
- Git在终端提交时打开VIM,但无法返回终端
- 提交指定文件
- 如何在Mac上设置我的默认shell,例如Fish?
- 如何在Linux虚拟机的控制台中上下滚动
- 如何在终端中提高光标速度?
- 修改一个目录下所有文件和文件夹的权限为644/755
- 仅在文件不存在时才将行追加到文件中
- 如何清除tmux中的滚动缓冲区?