298

Is is possible to open a new-window with its working directory set to the one I am currently in. I am using zsh, if it matters.

6 Answers 6

417

The current (1.9a) Tmux man page lists an optional -c start-directory parameter for some commands, including new-window and split-window. It also contains the format variable pane_current_path, which refers to the Current path if available.

By combining these, we can open a new window with the current working directory using
new-window -c "#{pane_current_path}"
The quotation are needed in case the current path contains spaces.

If you want to split the current pane vertically, use
split-window -c "#{pane_current_path}"
or, for a horizontal split
split-window -h -c "#{pane_current_path}"

To make the key bindings open new splits and windows with the current working directory by default, add the following to your .tmux.conf. The " with surrounding quotes is to tell Tmux it shouldn't start a string but rather bind the " key.

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
12
  • 1
    Does this not work on tmux 1.9? I can't get it to do the expected thing. Nov 17, 2015 at 14:57
  • 3
    bind-key -r Enter new-window -c "#{pane_current_path}", works for tmux 2.1
    – Marslo
    Jan 7, 2016 at 10:12
  • 10
    Works in tmux 2.3 on OSX. Don't forget to stop / kill all existing sessions to see these bindings applied.
    – jmgarnier
    Mar 24, 2017 at 10:19
  • 4
    @jmgarnier or re-source the profile: prefix-:, then type source ~/.tmux.conf
    – ijoseph
    Sep 5, 2017 at 21:44
  • 13
    @jmgarnier or just tmux source-file .tmux.conf.
    – phil294
    Oct 2, 2017 at 21:35
188

Starting in tmux 1.9 the default-path option was removed, so you need to use the -c option with new-window, and split-window (e.g. by rebinding the c, ", and % bindings to include
-c '#{pane_current_path}'). See some of the other answers to this question for details.


A relevant feature landed in the tmux SVN trunk in early February 2012. In tmux builds that include this code, tmux key bindings that invoke new-window will create new a window with the same current working directory as the current pane’s active processes (as long as the default-path session option is empty; it is by default). The same is true for the pane created by the split-window command when it is invoked via a binding.

This uses special platform-specific code, so only certain OSes are supported at this time: Darwin (OS X), FreeBSD, Linux, OpenBSD, and Solaris.

This should be available in the next release of tmux (1.7?).


With tmux 1.4, I usually just use

tmux neww

in a shell that already has the desired current working directory.

If, however, I anticipate needing to create many windows with the same current working directory (or I want to be able to start them with the usual <prefix>c key binding), then I set the default-path session option via

tmux set-option default-path "$PWD"

in a shell that already has the desired current working directory (though you could obviously do it from any directory and just specify the value instead).

If default-path is set to a non-empty value, its value will be used instead of “inheriting” the current working directory from command-line invocations of tmux neww.

The tmux FAQ has an entry titled “How can I open a new window in the same directory as the current window?” that describes another approach; it is a bit convoluted though.

10
  • 7
    Is there a way I can map <prefix>c to read the working directory of the underlying shell instance (if any) and set the default-path prior to executing new-window. Or is that too much to ask of tmux :)
    – sharat87
    Apr 27, 2011 at 5:34
  • On another note, is it even possible to read the underlying shell's working directory? I'd kill to have it displayed in my status bar.
    – sharat87
    Apr 27, 2011 at 5:34
  • 2
    There is no portable way to extract the cwd of another process (though it is possible on some platforms (e.g. /proc/PID/cwd on Linux)). There is a possible partial solution in an entry of the tmux FAQ (it has the shell record its cwd when it prints a prompt, then binds a key that starts a new shell in the recorded directory). Apr 27, 2011 at 7:14
  • 1
    @paradroid: Anything done via a binding will (by default) use the cwd of the tmux server or the value of the default-path session option (if that is set). The tmux FAQ has an entry that describes a way to bind a key that starts a new window with the cwd of the shell running in the current window (“How can I open a new window in the same directory as the current window?”), but the method is quite convoluted. The same could probably be done for split-window and new-session (instead of neww). Aug 23, 2011 at 1:53
  • 1
    That tmux FAQ URL no longer works, and the new one (github.com/tmux/tmux/wiki/FAQ) doesn't have that named How can I open a new window in the same directory as the current window?. Here's a mirror of the old one: github.com/ddollar/tmux/blob/d48eb68e5/FAQ#L330 Feb 4, 2021 at 14:01
68

Use new-window -c "#{pane_current_path}".

You can add the following to your ~/.tmux.conf to make it persistent (assumming default keybindings):

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

The default-path setting was removed from 1.9 (released on Feb 2014). In the change, the author recommended using either -c "#{pane_current_path}" or -c "$PWD in the new-window and split-window commands.

Also answered in this duplicate question.

12

With recent versions of tmux (v1.8, but maybe in v1.7 too):

tmux new-window -c "$PWD"
2
  • This appears to work with split-window as well, e.g. tmux split-window -v -c "$PWD"
    – user7089
    Nov 5, 2013 at 17:53
  • 3
    $PWD doesn't appear to work for me in tmux 1.9a. I had to use pane_current_path as suggested above.
    – jordelver
    Oct 16, 2014 at 13:39
5

The other answers does not work for me when I try put them as bindings (specifically tmux split-window -c). But I've made up my own solution that I've been using for more than a year that works for both new-window and splits:

~/.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"

Works, at least, with $(tmux -V) 1.8. See out-commented lines here for a version working for older tmuxes that don't have the show-environment command.

1

tmux did that in version 1.8 but in 1.9 this feature was removed in favor of using -c flag.

This can be solved but re-binding new-window but in case you want to run something else it becomes too wordy: instead of typing neww man tmux you'll have to type neww -c "#{pane_current_path}" man tmux which you most probably don't want to do.

There's a mod of tmux (I'm the author) to add a proper scripting language to tmux to allow using aliases, binding multiple commands in 'mode', variables, loops, etc... And also, it brings back the that behavior: new windows and panes are opened in the current directory.

It can be built from sources here: http://ershov.github.io/tmux/

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .