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
^[OD
versus this (outside tmux):
^[[1;5D
The line
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 vte
, vte-256color
, etc. 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 TERM=xterm-new
.
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"
Further reading:
Control
+Left
is working;Control
+Right
isn't. I'll test and update later. – shivams Jun 18 '16 at 01:13