web-dev-qa-db-ja.com

TmuxおよびZSHカスタムプロンプト:ウィンドウ名のバグ

ZSHプロンプトを oh-my-zsh でカスタマイズして読みやすくし、リポジトリにいる場合はgitに関する情報を追加しました。

例:
bob@inf [~/docs] %
bob@inf [~/src/nicest] master %(gitリポジトリ内)

うまく動作しますが、tmuxとウィンドウ名にいくつかのバグがあります。それでも意味のない値が表示され、automatic-rename offを使用して無効にすることはできません(機能せず、コマンドごとにウィンドウ名が変更されます)。最初の例では、tmuxはウィンドウ名に~/docsを使用します。

私はそれをどのように修正できるかわかりません、変更を加えることができても問題がどこにあるのかを理解したい場合は、zshプロンプトをそのまま維持しますか?

別の解決策は、コマンドsettile(from this answer )を再定義することですが、正しい方法を実行する方法がわかりません。

44
Adrien Coquio

Oh-my-zshを覗いてみたところ、 おそらく疑わしい が見つかりました。

TERM環境変数の値がscreenで始まる場合(screentmux)、screen端末制御シーケンスを使用してウィンドウの名前を

  • (シェルプロンプトを表示する直前)
    現在の作業ディレクトリの「チルダ圧縮」パスの左端部分(..の後に最後の13文字、または15文字未満の場合はパス全体)
  • (コマンドを開始する直前)
    実行される予定のコマンドの最初の「単語」(sshSudo、およびその他数個は数えません)。

このように機能しているようです(そのディレクトリにいたときに、ウィンドウの名前が~/docsに変わったと言っていました)。この自動名前変更を無効にしたい場合は、.zshrcでDISABLE_AUTO_TITLEシェルパラメータをtrueに設定することで完全に無効にできます。

DISABLE_AUTO_TITLE=true

対話型シェルでこれを設定しただけでは、現在のウィンドウの名前が空の文字列になりますが、oh-my-zshはそのシェルインスタンスの各プロンプトとコマンドの前にウィンドウの更新を停止します(すべての新しいシェルインスタンスに影響する.zshrc)。

77
Chris Johnsen

上記の答えがあなたに解決策を与えることを私は知っていますが、別の解決策は単に〜/ .tmux.confにこのオプションを追加することです

set-option -g allow-rename off
31
albertogg

私は同じ問題に遭遇しました。それは、tmuxのウィンドウ名が.tmux.confで設定することによっても変更されたことです:

set-window-option -g automatic-rename off

クリスの回答に感謝します。変更した後、私のtmuxウィンドウ名が自動的に変更されませんでした。

set -g default-terminal "screen-256color"

に:

set -g default-terminal "xterm-256color"
6
rwxrwxrwx

特定のウィンドウでのみ自動名前変更を無効にしたい場合は、以下を使用できます。

 set -t [WINDOW_NUMBER] automatic-rename off

別のセッションの特定のウィンドウで自動名前変更を無効にします。

 set -t [SESSION]:[WINDOW_NUMBER] automatic-rename off
0
Viktor Nonov