Я недавно начал использовать tmux (раньше был пользователем экрана), и мне это нравится, за исключением одной маленькой проблемы. Я использую emacs в своей сессии tmux, и я привык использовать клавиши со стрелками Shift для перемещения между окнами emacs (не окнами tmux). При запуске в tmux эти привязки перестают работать полностью (похоже, что они вообще не регистрируются в emacs). Если я выхожу из tmux и просто запускаю emacs в моей оболочке, они работают нормально.
Я использую iTerm2, ssh'd в Linux, запускаю там tmux / emacs. У меня есть привязки клавиш Shift-стрелка, настроенные следующим образом в моем .emacs:
(global-set-key "\M-[1;2A" 'windmove-up)
(global-set-key "\M-[1;2B" 'windmove-down)
(global-set-key "\M-[1;2C" 'windmove-right)
(global-set-key "\M-[1;2D" 'windmove-left)
Когда вы не работаете в tmux, я могу подтвердить, что это правильные последовательности символов для комбинаций клавиш Shift-стрелка, выполнив Cq в emacs, а затем нажав последовательность клавиш. В tmux даже это не работает, потому что кажется, что он не видит никаких данных от нажатия клавиши Shift-стрелка (он просто находится в приглашении Cq).
Глядя на привязки клавиш для tmux, я не думаю, что что-либо связано с клавишами со стрелками Shift, и даже если бы это было так, они регистрировались бы только после ввода префикса (который связан с Co в моем случае).
Любая идея о том, как заставить клавиши shift-стрелки снова работать в tmux?
Ответы:
Во-первых, убедитесь, что ваш СРОК правильный в каждом месте:
xterm
что-то (напримерxterm-256color
) внутри вашей локальной оболочки, запущенное в вашем окне iTerm2xterm
Что-то внутри вашей оболочки после SSHing для системы Linux.Это должно быть то же, что и то, что вы используете локально в iTerm2 , поскольку SSH должен передавать его на удаленную сторону (и, что важно, удаленная сторона не должна слепо перекрывать значение в файле инициализации оболочки).
screen
-что-то (напримерscreen-256color
) внутри вашей оболочки, работающей под tmux в системе Linux.Вы всегда должны использовать
screen
TERM на основе -mm внутри tmux .Наличие
xterm
TERM непосредственно вне tmux позволит tmux распознавать измененные клавиши со стрелками, но не пропустит их, если у вас неxterm-keys
включена опция окна. Поместите это в свою~/.tmux.conf
систему Linux:Последовательности для сдвинутых ключей теперь должны пройти к Emacs , работающему внутри tmux , через SSH-соединение, внутри окна iTerm2 .
источник
export XTERM=xterm-256color
(я пишу это, потому что я не знал, что означает «ваш СРОК» в ответе, я искал комментарий, объясняющий, что ... его не было, а теперь есть).Сначала вы должны включить его
xterm-keys
в конфигурации Tmux. Так что вставьте следующее в~/.tmux.conf
Но это сломает другие комбинации клавиш. Чтобы исправить их, поместите следующее в ваш
~/.emacs
или~/.emacs.d/init.el
конфигТакже у меня есть свое решение в Archlinux Wiki
источник
tmux FAQ раньше содержал следующую запись :
Я открыл выпуск tmux # 1349, чтобы запросить восстановление для записи FAQ.
источник
В общем случае подобные проблемы возникают из-за несоответствия между тем, что посылает эмулятор терминала, и тем, что ожидает клиентское приложение.
Разные терминальные эмуляторы имеют разную степень настраиваемости, поэтому необходимо ознакомиться с настройками эмуляции конкретного.
Клиентские приложения зависят от значения,
$TERM
которое используется для поиска возможностей терминала (эмулятора) в базе данныхterminfo
(илиtermcap
).В вашем случае ваши emacs-привязки используют явные последовательности, поэтому
$TERM
terminfo не имеет значения: ожидается определенный эмулятор терминала - как вы уже выяснили, -xterm
-совместимый.источник