222

仅供参考,我正在通过 Mac OS X 终端应用程序使用 Tmux。

4

15 回答 15

242

同样的问题已经困扰了我很长一段时间。这是我想出的最好的。把它放到你的 .tmux.conf 文件中:

bind -n C-k clear-history

这将 ctrl-k 绑定到 tmux clear-history 命令。绑定后的 -n 使您不必发出 tmux 命令前缀(默认为 ctrl-b)。我使用 bash,所以 ctrl-l 已经相当于在命令行输入“clear”。使用这两个键,我得到了一个不错的 ctrl-l、ctrl-k 组合,它将所有滚动缓冲区移出屏幕(“清除”),然后删除所有历史记录(tmux“清除历史”命令)。

它不如 Terminal、iTerm 或 Konsole 的 1 键组合清除它好,但它比一直输入清除历史要好。

于 2012-05-11T15:06:36.573 回答
71

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

如果你只是想偶尔做一次,你根本不需要映射......

前缀默认为<Ctrl-b>

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

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

关于 tmux 的一个很酷的事情是你可以运行任何这样的命令......或者在 shell/脚本中运行它们tmux command......或者为它们制作键盘快捷键。

于 2018-02-06T15:00:03.373 回答
63

正如@juanpaco 正确指出的那样,clear-history是清除回滚缓冲区的命令。
我要补充一点,我还想在同一命令中清除屏幕上的内容。发出send-keys -R重置(清除)屏幕,所以我在我的.tmux.conf

bind-key b send-keys -R \; clear-history

这将清除屏幕和回滚缓冲区。

于 2012-07-17T14:49:10.513 回答
22

如果您想结合CTRL-L加上清除历史,请将其添加到您的~/.tmux.conf

bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history

例如,如果您在 MySQL shell 中,这甚至可以工作。

于 2013-11-18T21:29:00.423 回答
21

我发现使用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 命令似乎在单独的线程中运行以发送密钥。

于 2012-10-25T09:27:10.917 回答
16

发现这在 TMUX 2.6 中效果最好,清除屏幕、回滚,但之后显示提示。

使用 Ctrl-L

bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
于 2017-10-07T08:02:53.960 回答
15

比大多数都简单,我刚刚创建了一个名为 的 shell 脚本cls,并在我想清除屏幕和回滚缓冲区时运行它。

就是这样:

分类

clear;
tmux clear-history;
于 2016-06-16T18:48:10.773 回答
7

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(默认情况下)。

于 2017-10-20T07:01:34.637 回答
3

我已经使用了上面的一些以及其他来源来提出:

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 ignore space”+您的 shell 名称以获取更多信息信息)。我希望这个命令不会出现在我的历史记录中,因为它更符合终端中的 ctrl-k。

第一个发送键 Cu 和发送键 Ck 将清除当前在提示符下键入的任何内容,以确保“clear && tmux clear-history”成功(例如,如果您在提示符下键入了“ABCDEFG”并且你的光标在 D 和 E 之间,这样可以确保“ABCD clear && tmux clear-historyEFG”不会发送到 shell,这会失败)。

发送键“向上”和最后一个发送键 Cu 清除了 shell 内部历史记录中的最后一项。即使有上面​​提到的尾随空格,shell 的内部历史也将包括“clear ...”行。发送和 Ctrl-u 摆脱了这个。

最后,在 iTerm 中,我将 ctrl-k 设置为映射到 ctrl-ak(我的 tmux 前缀设置为 ctrl-a),所以我可以输入 ctrl-k,这是我多年以来想做的事情所以。我这样做是通过转到 iTerm > Preferences > Profiles > Keys 并添加一个快捷方式来发送十六进制代码“0x01 0x6B”。这里有一篇很棒的文章,它提供了更多关于在 tmux 和 iTerm 中使用十六进制代码的信息:http: //tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

这几乎给了我 tmux 的 ctrl-k 。唯一让我感到烦恼的是,如果您当前在提示符下输入了某些内容,那么没有 tmux 的真正 ctrl-k 不会有问题,并且会在清除屏幕时保留您输入的内容。如前所述,这种方法需要清除输入的内容,这样“clear ...”命令才不会失败。但它非常接近!

于 2014-01-02T06:15:42.657 回答
3

要快速修复以清除单个 tmux 窗格,您可以设置别名...

# Tmux Clear pane
alias tc='clear; tmux clear-history; clear'
于 2019-10-22T11:21:34.863 回答
3

如果您使用 清除屏幕clear,您可以检查是否TMUX已设置,并相应地创建别名。

把它放在你的 .bashrc 中:

if [[ $TMUX ]]; then
  alias clear='clear && tmux clear-history'
fi
于 2021-12-01T00:21:30.777 回答
2

所以,我从上面使用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什么的!


注意事项:

这里有一个重要的注意事项:如果它不是外壳,这是在无形地调整被清除的窗格的大小。SIGWINCH这可能会在某些侦听es的命令行应用程序中触发调整大小行为;但我的理由是这不是一个大问题,因为这些程序你很可能无论如何都不会试图“清除” 。

另外,shell-quoting 的情况已经很乱了,嵌入的时候很容易变成一个#{pane_current_command}所以要小心,你可能需要根据你的default-command设置来修改它。

这同样适用于我对该命令匹配结束的测试"sh";如果你有类似default-command的东西/bin/bash --login或复杂的东西exec实际的命令"sh"可能不会以;结尾。如果您想查看正在测试的内容,请使用⌃B :执行。display-message '#{pane_current_command}'

于 2015-12-08T17:20:06.657 回答
2

经过大量的研究和花费时间。我在 zsh 和 terminal.app 上找到了最适合我的方法

prefix-c用来清除屏幕并prefix-C清除历史记录和滚动缓冲区并且上面没有留下任何线条,因为我觉得它很烦人。

没有 Vim

# 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

使用 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 C-l \; clear-history \; send-keys
于 2016-10-09T18:09:34.563 回答
1

为什么不?bind -n C-l send-keys C-l

于 2015-02-20T16:58:52.847 回答
0

如果您想要完全清除窗格,另一种选择是将窗格临时调整为一行,清除历史记录,然后重新调整大小。这应该可以通过一个 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
"
于 2021-06-03T07:10:31.900 回答