Todd Freed is right, the "correct" way to do this is using
\;. Sort of. But there's a snag.
You see, you join a sequence of tmux commands together by giving tmux the conjunction
;. Thus, in a file sourced by tmux, you might say
new-session "monitor1" ; split-window -v "monitor2"
if, for some reason, you wanted that all on one line. Now, you can give that one-line compound statement to the
tmux command from a shell also but the
; must be escaped so that the shell interprets it as another argument for
tmux. Thus the equivalent of the above from the shell is
$ tmux new-session "monitor1" \; split-window -v "monitor2"
Similarly, the tmux
bind-key command takes a series of arguments which are the tmux command and arguments to run when the key is pressed. If you wanted to bind
C-q to the above sequence from inside a file sourced by tmux, you'd say
bind-key -n C-q new-session "monitor1" \; split-window -v "monitor2"
Here we've escaped the
; from tmux, so that tmux doesn't interpret it as the end of the
bind-key command, but as another argument to
bind-key telling it to form a compound command as the bound value of the
So what happens when we want to make tmux do that from the shell? A whole lot of escaping.
$ tmux bind-key -n C-q new-session "monitor1" \\\; split-window -v "monitor2"
First, we have to escape the
\ and the
; each from the shell, causing the shell to pass the two characters
\; as an argument to
tmux. This then escapes the
; from tmux, causing it to assign the entire compound statement as the binding of
Now, all that said, if you use a complex tmux setup like this repeatedly, I'd suggest that you create a tmux file to keep it in:
# In split-windows.tmux:
split-window -v "monitor2"
bind-key -n C-s new-window "monitor4"
$ tmux source split-windows.tmux # (or even make an alias for this)
It'll be a lot easier to maintain that way.