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


当前回答

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

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

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的一键组合来清除,但它比一直输入清除历史记录要好得多。

如果你在OSX上用Iterm挣扎:

如果你想结合CTRL-L加上clear-history,添加到你的~/.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…”命令才不会失败。但它非常接近!

经过大量的调查和时间。我已经在zsh和terminal.app上找到了最适合我的方式

我使用前缀-c来清除屏幕和前缀-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

在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