Как заставить vim правильно работать с tmux?

19

Я пытаюсь понять, как играть vimи tmuxиграть вместе.

Моя проблема: когда я использую, xterm-256colorя получаю vimработать хорошо, но фон не отображается должным образом.

Я исправил это с помощью screen-256color. Это выглядит красиво, но ломает Ctrl + arrow keys(они идут в режиме вставки и удаляют 4 строки). Я хочу использовать эти сопоставления вместо того, чтобы переключать вкладки vim.

Как мне заставить это работать?

outsmartin
источник

Ответы:

8

Бегите catвнутри tmuxи нажимайте соответствующие клавиши, чтобы узнать коды выхода, которые они генерируют. Для меня это дает ^[[Dи ^[[C. Затем просто сопоставьте эти коды перехода напрямую.

nnoremap ^[[D gT
nnoremap ^[[C gt

где ^[является escape-символом, который вы можете вставить, нажав <CTRL-v><ESC>в vim.

Мика Фишер
источник
Это не изменило поведение моего vim.
outmartin
Что печатается, когда вы запускаете cat в tmux и нажимаете клавиши?
Мика Фишер
^ [[1; 5C и ^ [[1; 5D. Хорошая идея, я не знал, как их получить. Только что попробовал. Оно работает! Спасибо.
перехитрить
Отлично. Я отредактировал свой ответ, чтобы включить метод, чтобы получить правильные коды выхода.
Мика Фишер
22

Существует несколько уровней конфигурации, которые необходимо правильно настроить для лучшей функциональности.

  1. Сконфигурируйте tmux для распознавания последовательностей. Перед запуском tmux установите значение TERM, соответствующее вашему эмулятору терминала (например xterm-256color). Запись базы данных TERMINFO определяется по переменному окружению TERM говорит tmux , как распознать последовательности для модифицированного клавиша со стрелками (в определенном пользователе возможность { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Сконфигурируйте tmux для генерации последовательностей. Установите для xterm-keysпараметра сеанса значение onтак, чтобы tmux сгенерировал свою собственную последовательность в стиле xterm, когда он получит последовательность, которую идентифицирует ее TERM. В вашем ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Сконфигурируйте программы, работающие внутри tmux, для использования / ожидания большинства его последовательностей. Убедитесь, что вы используете screenTERM на основе tmux (например screen-256color). Это говорит программам, работающим внутри tmux, как управлять (пере) эмуляцией терминала tmux и какие ответы они должны ожидать от tmux .
  4. К сожалению, screenзаписи базы данных terminfo на основе часто не определяют какие-либо последовательности для измененных клавиш со стрелками (т. Е. Они могут не иметь kUPи т. Д.), Поэтому программы, работающие внутри tmux, могут не знать, ожидают ли такие последовательности. Вам нужно будет вручную настроить любые программы, которые вы хотите распознать эти ключи. В Vim вы можете поместить это в свой ~/.vimrc:

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys is on
        execute "set <xUp>=\e[1;*A"
        execute "set <xDown>=\e[1;*B"
        execute "set <xRight>=\e[1;*C"
        execute "set <xLeft>=\e[1;*D"
    endif
    

    Возможно, вы захотите использовать варианты без x(то есть <Up>вместо <xUp>, и так далее), если вы обнаружите, что использование x-variant приводит к тому, что ваши обычные клавиши со стрелками перестают работать.

    Преимущество определения таких клавиш состоит в том, что вам не нужно отображать каждую из комбинаций модификаторов по отдельности (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); *получает специальную интерпретацию для обработки всех соответствующих последовательностей (см :help xterm-modifier-keys).

  5. Затем вы можете сопоставить ключи вместо их жестко закодированных последовательностей:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
Крис Джонсен
источник
1
Эй, это сработало отлично!
Пабло Олмос де Агилера С.
2

Как объяснялось здесь , отключите фоновое стирание цвета (BCE), очистив параметр t_utтерминала (запустите :set t_ut=в Vim, а затем нажмите Control+, Lчтобы обновить дисплей терминала), чтобы цветовые схемы работали правильно, когда Vim используется внутри экранов tmux и GNU.

Таким образом, вы можете сохранить свое TERMзначение как xterm-256colorдля правильного определения ключа, так и для получения правильной цветовой схемы Vim! :-)

sunaku
источник
1

Помогает ли установка set t_Co=256в вашем ~ / .vimrc? Это просто настройка цвета, но она может помочь устранить некоторые проблемы.

Вы также можете переназначить ctrl+Arrowключи в вашем ~ / .vimrc ...

Редактировать: вы пробовали ctrl+Arrowв сеансе экрана GNU? Я думаю, что это, возможно, ваша проблема.

Сардатрион - Восстановить Монику
источник
он выглядит и работает отлично в экране с XTERM-256 - цветные
outsmartin
set t_Co = 256 сделано также
перехитрил
Это помогло?
Сардатрион - Восстановить Монику
к сожалению нет. Что именно вы имеете в виду с remapign ctrl + стрелка? Я использую их, уже переназначенные для переключения вкладок в vim.
outmartin
это отображается так: map <C-Right> gt
outsmartin