I've mostly ditched tmux for emacs shells. I wrote a quick script that gives me tmux like shortcuts for tagging and switching to different buffers. This allows me to start several shells and move between them with simple "Alt-Fn" shortcuts. The split screen modes and copy paste are so powerful I find myself opening emacs just to use the shells even when I don't have any need for a file editing buffer.
That's quite funny. I've ditched the terminal for vim with split screen, for pretty much the same reason that you are using emacs - quicker to shift between shells and copy/paste become so much more (also, searching command history is not intuitive).
Here's my shell script for vimterm.sh:
vim -c 'call Tmux()'
And here's the relevant function from my .vimrc:
function! Tmux()
vsplit
terminal
set nonumber
wincmd j
q
wincmd l
terminal
set nonumber
wincmd j
q
endfun
I never really set up a function for it, but what I usually do is in a new vim instance, I'll run the :term command, press ctrl-w o to make it the only window and then run a nested vim instance in that term window (typically one instance per vim tab). I'll open new terminals by running :tab :term.
Basically, I'm using one instance of vim as a session manager to run other programs in, including vim itself. You can pass ctrl-w to a nested vim instance by pressing
I run tmux in vterm in emacs rather than multiple vterm buffers because as awesome as emacs is it still crashes or just becomes unusable with enough uptime. This way I can bounce emacs without losing my terminals.
I still use Screen/TMux to run servers, or any process that I need to keep running for a long time and still maintain control over it's STDIN/STDOUT.
But now that I use Emacs "shell-mode" I hardly ever use Screen/TMux anymore. I don't even use Bash anymore, I switch my default shell to Dash, because I don't need Bash's tab-complation in Shell-mode. I use Emacs's tab completion instead.