The problem is twofold. First,
tmux by default converts the control-arrow keys from one type of escape sequence to another. So special keys such as controlleft are sent to
vim without the modifier, e.g., left. If you use
cat -v to see the different escape sequences, you might see something like this
versus this (outside tmux):
set-window-option -g xterm-keys on
fixes that aspect. The other part is that
tmux by default uses the terminal description for
screen. That terminal description does not describe the control-arrow keys. These entries from the terminal database would be the most appropriate for VTE (gnome-terminal):
There are others, such as
which would be automatically selected when running in
screen if the corresponding
TERM outside were
tmux does not do this automatic-selection; you have to modify its configuration file.
By the way, there is no "screen.xterm" entry because it would interfere with some usages of
screen. There is no conflict with
If you have a default (minimal) terminal database such as
ncurses-base in Debian, you might not have those. More common would be
xterm-256color, which is close enough to use with vim and tmux.
For example, if I add this to my
.tmux.conf file, it behaves as you expect in vim:
set -g default-terminal "xterm-256color"