Tmuxがセッションが作成されたディレクトリを忘れる


8

tmuxで複数のセッションを作成すると、後続のセッションのすべての新しいウィンドウの現在のディレクトリが、最初のウィンドウの現在のディレクトリとして設定されます。

例えば:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

tmuxに、後続のセッションのすべての新しいウィンドウの現在のディレクトリを、セッションが作成されたディレクトリとして設定するにはどうすればよいですか?

tmux 1.6

zsh 4.3

回答:


21

tmux 1.9以降、default-pathオプションは削除されました

以下を使用して、セッションが開いたディレクトリで開くことができます(名前の「クライアント」は、シェルの現在のtmux runninであることを私に示しますが、同じクライアント):

bind-key c  new-window -c "#{client_cwd}"

それ以外の場合は、現在のペインのパスをコピーします。

bind-key c  new-window -c "#{pane_current_path}"

一部のワークフローにアピールする可能性があるpane_start_pathもあります。

bind-key c  new-window -c "#{pane_start_path}"

ウィンドウ分割コマンド用。

bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"

1
これが正解です。具体的には、私の場合は2番目のオプションです。
Mike Rapadas、2014年

余談ですが、構成ファイルを変更する前に、バックグラウンドを含む現在動作しているすべてのtmuxターミナルを閉じることを忘れないでください。そうしないと、tmuxが新しい構成をロードしません。
randomness2077 2014年

@lightmanhk:source〜/ .tmux.conf
David C. Bishop

1
ペイン分割のためにこれを一般化する方法はありますか?split-window -h "#{pane_current_path}"動作しません...
バッハ、

1
@バッハ-cで試してください。split-window -h -c "#{pane_current_path}"
David C. Bishop 14

3

この質問はかなり古いものだと思いますが、自分で答えを探していたときにStackExchangeで唯一の質問の1つとして出てきたので、tmux 1.8でどのように解決したかを示します。

このnew-windowコマンドは-c、新しいウィンドウの現在のディレクトリを指定できるようにするフラグを取ります。デフォルトでは、これは空の文字列で、現在のペインの作業ディレクトリを新しいウィンドウのディレクトリとして使用します。フラグ-の値としてa を渡す-cと、新しいウィンドウのディレクトリが、セッションが開かれた場所に設定されます。

これはドキュメントからの抜粋です:

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

これ<PREFIX> cを反映するためにキーバインドのデフォルトの動作を変更したい場合は、ここで私が私の中でしたこと~/.tmux.confです:

bind-key c   new-window -c -

0

ここにはかなりの数の答えがあります:https : //unix.stackexchange.com/questions/12032/create-new-window-with-current-directory-in-tmux

要約すれば:

tmux FAQから、1つの鈍角な(しかし、非常に一般的でかなりシェルに依存しない)方法:

  • 現在のウィンドウと同じディレクトリに新しいウィンドウを開くにはどうすればよいですか?

1つのオプションは、ウィンドウで「TMUX = tmux」を実行することです。ただし、これはコマンドが実行されていない場合にのみ機能するため、コマンドを入力できます。

回避策は、環境変数を介した現在のパスをtmuxに知らせることです。これを行うには、次のコマンドを使用します。

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

TMUXPWD_i(iは現在のウィンドウの番号)を現在のディレクトリのパスに設定します。このコマンドはPS1に追加できます。次に例を示します。

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

新しいウィンドウが作成されると、ディレクトリを変更するようにシェルに要求する必要があります。新しいバインディングを定義できます(たとえば、GNU bashを使用している場合)。

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

この解決策は、現在ターミナルでコマンドが実行されている場合でも機能しますが、TMUXPWD_iは交換後に更新されないため、別のウィンドウと交換したばかりのウィンドウでは機能しません。ただし、新しいプロンプトが表示されると、TMUXPWD_iは適切に更新されます。

シェルの呼び出しを必要に応じて置き換えるだけです。

また、明らかに新しいバージョンのtmuxでは、コマンドでこれに対処しています

tmux新しいウィンドウ

古いバージョンはこのように機能すると主張されています:

呼び出す

tmux neww

シェルからそのディレクトリでtmuxを開きます。

tmuxの現在の作業ディレクトリから新しいウィンドウまたはペインを開くことができるようにしたい場合は、代わりに次のようにする必要があります。

tmux set-option default-path "$ PWD"


助けてくれてありがとう、セイウチ。私はunix.stackexchangeでその質問を見て、FAQを読みました。しかし、これらは私の質問に対する答えではありません。
Shamaoke 2012年

1
新しいセッションを作成すると、そのセッションで開いたすべての新しいウィンドウまたはペインの現在のディレクトリが、セッションを開始したディレクトリになります。これは、単一のセッションを作成する場合にも当てはまります。ただし、新しいターミナルウィンドウを開いて別の1つのセッションを開始すると、すべての新しいウィンドウの現在の作業ディレクトリは、最初のセッションを開始したディレクトリになりますが、現在のセッションは開始されません。これはtmux 1.6のバグのようです。バージョン1.3にダウングレードしたときに、バグは表示されませんでした。
Shamaoke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.