回答:
これと同じ質問がかなり前から私を悩ませてきました。これが私が思いついた最高のものです。これを.tmux.confファイルに入れます。
bind -n C-k clear-history
これにより、ctrl-kがtmux clear-historyコマンドにバインドされます。bindの後に-nを指定すると、tmuxコマンドプレフィックス(デフォルトではctrl-b)を発行する必要がありません。私はbashを使用しているため、ctrl-lはすでにコマンドラインで「clear」と入力するのと同じことを行っています。これらの2つのキーを使用すると、すべてのスクロールバッファーを画面から移動し(「クリア」)、すべての履歴を削除する(tmuxの「clear-history」コマンド)、すばらしいctrl-l、ctrl-kコンボが得られます。
ターミナル、iTerm、またはKonsoleの1キーのコンボほどきれいにはなりませんが、常にclear-historyを入力するよりも優れています。
bind k send-keys "clear"\; send-keys "Enter"
クリア部分について行ってきましたが、ビルトインを使用する方ctrl+l
が簡単clear-history
で、スクロールバック履歴を取り除くことは良い追加です。
@juanpacoが正しく述べたように、clear-history
はスクロールバックバッファーをクリアするコマンドです。
同じコマンドで画面の内容もクリアしたいことを追加します。send-keys -R
リセットを発行すると画面がリセット(クリア)されるので、.tmux.conf
bind-key b send-keys -R \; clear-history
これにより、画面とスクロールバックバッファがクリアされます。
send-keys
:「-Rフラグにより、端末の状態がリセットされます。」おそらく更新する必要があるだけです。
bind -n C-l send-keys C-l \; clear-history
clear-history
コマンドを入力する状態に到達するには、を押してCtrl+B
から、コロン(:
)でコマンドを開始します。
send-keys -R C-l \; clear-history
ます。
ここでのすべての答えは、新しいキーバインディングの追加について話します。
たまにそれをしたいだけなら、マッピングはまったく必要ありません...
接頭辞のデフォルトは <Ctrl-b>
入力するだけで<prefix>:
、関連するペインで、次に入力clear-history
してEnterキーを押します。
tmuxの優れた点の1つは、そのようなコマンドを実行できること、またはシェルでスクリプトを実行できること、またはスクリプトでスクリプトを実行できること、tmux command
またはキーボードショートカットを作成できることです。
cle
オートコンプリートし<tab>
、2回目にを使用<up arrow>
して前のエントリにアクセスできます。この方法はかなり高速です。
<Ctrl-b> the
。c`キーを押してから入力を開始すると、新しいウィンドウを作成するように設定されているためです。
:
た後、それを押すとインタラクティブなプロンプトが表示されます-ここに「c」を入力します
CTRL-L
plus clear-history を組み合わせる場合は、これを以下に追加します~/.tmux.conf
。
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
これは、たとえばMySQLシェルを使用している場合でも機能します。
tail -f some.log
ですよね?ctrl-Z
これと組み合わせる方法はありますか?それを正しく理解しているように見えます。
を使用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コマンドは送信キーとは別のスレッドで実行されているように見えます。
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
ほとんどの場合よりもはるかに簡単ですが、私cls
はと呼ばれるシェルスクリプトを作成し、画面とスクロールバックバッファをクリアしたいときに実行します。
これだけです:
cls
clear;
tmux 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
をオンにする必要があります(デフォルトではオンになっています)。
私は上記のいくつかに加えて他のソースを使用して思いつきました:
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"の先頭のスペースは、コマンドが履歴ファイルに書き込まれるのを防ぎます(先頭のスペースをこのように処理するようにシェルを設定している場合)。google "hist ignore space" +シェルの名前情報)。これはターミナルのctrl-kとよりインラインなので、このコマンドを履歴に表示しないようにします。
最初のsend-keys Cuとsend-keys Ckは、プロンプトで現在入力されているものをすべてクリアして、「clear && tmux clear-history」が成功するようにします(たとえば、プロンプトで「ABCDEFG」と入力して、 DとEの間のカーソル。これにより、「ABCD clear && tmux clear-historyEFG」がシェルに送信されず、失敗します)。
send-keys "Up"とlast send-keys Cuは、シェルの内部履歴から最後のアイテムを消去します。上記の末尾のスペースがあっても、シェルの内部履歴には「clear ...」行が含まれます。送信してCtrl-uでこれを取り除く。
最後に、iTermでctrl-kをctrl-a kにマップするように設定しました(tmuxプレフィックスをctrl-aに設定しているため)、何年にもわたって手がやりたいことであるctrl-kを入力できますそう。これを行うには、iTerm> [設定]> [プロファイル]> [キー]に移動し、16進コード「0x01 0x6B」を送信するショートカットを追加します。:とITERM tmuxのと16進コードを使用してより多くの情報を提供し、ここで素晴らしい記事がありますhttp://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/は、
それはかなり私にtmuxでctrl-kを与えます。まだ少し気が引ける唯一のことは、現在プロンプトで何かを入力している場合、tmuxのない実際のctrl-kは問題がなく、画面をクリアする間、入力した内容を保持することです。すでに述べたように、この方法では入力されたものをクリアする必要があるため、「clear ...」コマンドは失敗しません。しかし、それはかなりすごく近いです!
何故なの? bind -n C-l send-keys C-l
-n C-l
基本的には「これをキャッチ」と言ってから、すぐに同じことを通過させます。(つまり、これは何もしません。)…次に、スクロールバックではなく画面をクリアするため、インテントがオフに⌃L
なります。ヒットしてから上にスクロールすると、すべてのスクロールバックがまだ記録されていることがわかります。この質問の目的は、表示されている端末ではなく、(tmuxの)スクロールバックをクリアすることです。⌃B [
多くの研究と時間を費やした後。zshとterminal.appで自分に最適な方法を見つけました
私が使用しています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
したがって、私はしばらく前からpluのアプローチを使用してきましたが、その制限にうんざりしました(基本的に、パススルーは、それを理解するプログラムにパイプしない限り意味がありません)。⌃L
そのため、このスレッドに対するさまざまな回答のさまざまなアプローチを改善しました。このアプローチは複雑ですが、シェルと他のコマンドの両方で機能します。
# ⌃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
何かで試してみてください!
ここで重要な注意点が1つあります。これは、シェルでない場合、クリアされているペインのサイズを変更することです。これにより、SIGWINCH
esをリッスンしている一部のコマンドラインアプリケーションでサイズ変更動作をトリガーできます。しかし、私の推論は、これは大きな問題ではないということです。なぜなら、これらはとにかく「クリア」しようとすることはほとんどないからです。
また、シェル引用の状況はすでに混乱で、かつ簡単になることができ、より埋め込むときに1の#{pane_current_command}
、ので注意してください、あなたはあなたに基づいて、これを変更する必要がありますdefault-command
設定。
同じことが、コマンドマッチングの最後のテストにも当てはまり"sh"
ます。のdefault-command
ようなもの/bin/bash --login
や複雑なものがあるexec
場合、実際のコマンドはで終了しない場合があり"sh"
ます。テスト対象を確認⌃B :
するdisplay-message '#{pane_current_command}'
場合に使用します。