There is a difference between plain shells (as in M-x shell and variants) and terminals (as in M-x vterm, or ansi-term) in Emacs. The former are essentially an infinite buffer without ncurses; the latter are full terminals with ncruses and a shell. Emacs calls the terminals of plain shells “dumb terminals”, to not raise any hopes. I personally love their infinte length and ability to edit them just like any other buffer. I typically have dozens to hundreds of shells but only few true terminals multiplexed in a long running Emacs session.