tmuxの現在のディレクトリに新しいウィンドウを作成する方法は?


回答:


140

以降tmuxの 1.9 default-pathオプションを使用する必要があるので、削除された-cとのオプションをnew-window、そしてsplit-window(再結合などによってc"および%含まれるようにバインディングを
-c '#{pane_current_path}')。詳細については、この質問に対する他の回答をご覧ください。


関連する機能は、2012年2月初旬にtmux SVNトランクに上陸しました。このコードを含むtmuxビルドでは、呼び出すtmuxキーバインディングはnew-window、現在のペインのアクティブプロセスと同じ現在の作業ディレクトリを持つ新しいウィンドウを作成します(default-pathセッションオプションは空です;デフォルトです)。同じsplit-windowことは、コマンドがバインディング経由で呼び出されたときに作成されるペインにも当てはまります。

これは特別なプラットフォーム固有のコードを使用するため、現時点では特定のOS(Darwin(OS X)、FreeBSD、Linux、OpenBSD、およびSolaris)のみがサポートされています。

これは、tmux(1.7?)の次のリリースで利用可能になるはずです。


tmuxの 1.4、私は通常ちょうど使用します

tmux neww

目的の現在の作業ディレクトリが既にあるシェルで。

ただし、同じ現在の作業ディレクトリで多くのウィンドウを作成する必要があると予想される場合(または通常の<prefix> cキーバインディングで開始できるようにしたい場合)、default-pathセッションオプションを次のように設定します。

tmux set-option default-path "$PWD"

必要な現在の作業ディレクトリがすでにあるシェルで(ただし、任意のディレクトリからそれを実行し、代わりに値を指定するだけでもかまいません)。

default-pathが空でない値に設定されている場合、のコマンドライン呼び出しから現在の作業ディレクトリを「継承」する代わりに、その値が使用されますtmux neww

tmuxののよくある質問はというタイトルのエントリを持っている別のアプローチを説明し、「私は、現在のウィンドウと同じディレクトリに新しいウィンドウを開くことができますどのように?」。それは少し複雑です。


6
<prefix>c基になるシェルインスタンス(存在する場合)の作業ディレクトリを読み取り、default-path実行する前に設定するためにマップする方法はありますかnew-window。それともtmuxに尋ねるには多すぎる:)
シュリカントシャラット

別の注意として、基礎となるシェルの作業ディレクトリを読み取ることさえ可能ですか?ステータスバーに表示するには殺すでしょう。
シュリカントシャラット

2
別のプロセスのcwdを抽出するポータブルな方法はありません(ただし、一部のプラットフォーム(/proc/PID/cwdLinuxなど)では可能です)。tmux FAQのエントリには、部分的な解決策があります(プロンプトを表示するときにシェルにcwdを記録させ、記録されたディレクトリで新しいシェルを開始するキーをバインドします)。
クリスジョンセン

わかりました、これは私の知識の範囲外であり、非常に信頼できるとは感じません。何かが私にこれすべてなしでよりよいかもしれないことを告げる..とにかくありがとう。
シュリカントシャラット

1
@paradroid:バインディングを介して行われることはすべて、(デフォルトで)tmuxサーバーのcwd またはdefault-pathセッションオプションの値(設定されている場合)を使用します。tmuxのよくある質問は、現在のウィンドウ内のシェル実行中のCWDで新しいウィンドウを起動するキーバインドする方法を説明しているエントリ(「私は、現在のウィンドウと同じディレクトリに新しいウィンドウを開くことができますどのように?」) 、しかし、この方法はかなり複雑です。おそらくsplit-windowandのnew-session代わりにand でも同じことができnewwます。
クリスジョンセン

268

電流(1.9A)tmuxのmanページには、オプションの一覧表示-c start-directoryなど、いくつかのコマンドのためのパラメータnew-windowとをsplit-window。またpane_current_path、を参照する フォーマット変数も含まれていますCurrent path if available

これらを組み合わせることにより、現在の作業ディレクトリを使用して新しいウィンドウを開くことができ
new-window -c "#{pane_current_path}"
ます。現在のパスにスペースが含まれる場合は引用符が必要です。

現在のペインを垂直に分割する場合は、
split-window -c "#{pane_current_path}"
または、水平分割に使用します
split-window -h -c "#{pane_current_path}"

キーバインディングがデフォルトで現在の作業ディレクトリで新しいスプリットとウィンドウを開くようにするには、次をに追加します.tmux.conf"周囲の引用符では、文字列を開始するのではなく結合してはならないTMUXを伝えるためにある"キーを。

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

1
これはtmux 1.9では機能しませんか?期待したことをすることができません。
エリックギャリソン

1
bind-key -r new-window -c "#{pane_current_path}"と入力し、tmux 2.1で動作します
-Marslo

5
OSXのtmux 2.3で動作します。これらのバインディングが適用されていることを確認するために、既存のセッションをすべて停止/強制終了することを忘れないでください。
jmgarnier

1
@jmgarnierまたは再ソースプロファイル:prefix- :、その後、入力source ~/.tmux.conf
ijoseph

8
@jmgarnierまたは単にtmux source-file .tmux.conf
phil294

37

はい、使用しますnew-window -c "#{pane_current_path}"。以下を追加し~/.tmux.confて永続化することができます(デフォルトのキーバインディングを想定):

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

default-pathパス設定をした除去いずれかを使用してそのコミットメッセージで推奨上流コードとTMUX著者から-c "#{pane_current_path}"または-c "$PWDnew-windowsplit-windowコマンド。

この重複した質問にも答えました。


10

tmuxの最新バージョン(v1.8、v1.7でも可能):

tmux new-window -c "$PWD"

これは、分割ウィンドウでも同様に機能するようです。たとえば、tmux split-window -v -c "$PWD"
user7089

3
$PWDtmux 1.9aで動作しないようです。pane_current_path上記のように使用する必要がありました。
ジョーデルバー14年

3

他の回答は、バインドとして(特にtmux split-window -c)配置しようとするとうまくいきません。しかし、新しいウィンドウと分割の両方で機能する1年以上使用している独自のソリューションを作成しました。

~/.bashrc

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

~/.tmux.conf

unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window

bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"

少なくとも、$(tmux -V)1.8で動作します。show-environmentコマンドを持たない古いtmuxで動作するバージョンについては、ここでコメントのない行を参照してください。


0

tmuxはバージョン1.8でそれを行いましたが、1.9では-cフラグを使用するためにこの機能が削除されました。

これは解決したが、再結合することができますnew-windowが、場合には、あなたはそれがあまりにも長ったらしいなり何かを実行したい:代わりに入力するのneww man tmuxあなたが入力する必要がありますneww -c "#{pane_current_path}" man tmuxどのあなたはおそらく行うにはしたくありません。

エイリアスの使用、「モード」、変数、ループなどの複数のコマンドのバインドを可能にする適切なスクリプト言語をtmuxに追加するtmuxのmod(著者)があります。また、その動作を復活させます。 :新しいウィンドウとペインが現在のディレクトリで開かれます。

次のソースからビルドできます:http : //ershov.github.io/tmux/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.