web-dev-qa-db-ja.com

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

new-windowを開いて、その作業ディレクトリを現在使用しているディレクトリに設定することはできます。重要な場合はzshを使用しています。

217
Shrikant Sharat

tmux1.9以降、default-pathオプションは削除されたため、-cオプションをnew-windowとともに使用する必要があります、およびsplit-window(たとえば、c"、および%バインディングを再バインドして、
-c '#{pane_current_path}')。詳細については、この質問の他の回答のいくつかを参照してください。


2012年2月上旬にtmuxSVNトランクに導入された関連機能。tmuxこのコードを含むビルド、new-windowを呼び出すtmuxキーバインディングは、現在と同じ現在の作業ディレクトリで新しいウィンドウを作成しますペインのアクティブなプロセス(default-pathセッションオプションが空である限り、デフォルトではこれです)。 split-windowコマンドによって作成されたペインがバインディングを介して呼び出された場合も同様です。

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

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


tmux1.4では、通常、

tmux neww

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

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

tmux set-option default-path "$PWD"

目的の現在の作業ディレクトリが既にあるシェルで(ただし、明らかに任意のディレクトリから実行でき、代わりに値を指定することもできます)。

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

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

150
Chris Johnsen

現在の(1.9a)Tmuxのマニュアルページには、-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}"
293
Simon Kohlmeyer

はい、_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_パス設定は 削除済み であり、_-c "#{pane_current_path}"_または_-c "$PWD_の_new-window_および_split-window_コマンド。

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

43
mmoya

Tmuxの最近のバージョン(v1.8、おそらくv1.7でも):

tmux new-window -c "$PWD"
10
mislav

他の回答をバインディングとして配置しようとすると、うまくいきません(特に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で動作するバージョンについては、コメントアウトされた行 here を参照してください。

3
Erik Westrup

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

これは解決できますが、new-windowを再バインドしますが、他の何かを実行したい場合は冗長になります。neww man tmuxを入力する代わりに、neww -c "#{pane_current_path}" man tmuxを入力する必要があります。したくない。

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

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

0
Yuriy Ershov