Як заставити vim правильно працювати з tmux?


19

Я намагаюся розібратися, як отримати vimта tmuxграти разом.

Моя проблема полягає в тому, що коли я використовую, xterm-256colorя отримую vimгарну роботу, але фон не відображається належним чином.

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

Як змусити це працювати?

Відповіді:


8

Запустіть catвсередину tmuxта натисніть відповідні клавіші, щоб дізнатися, які генеруються коди евакуації. Для мене це дає ^[[Dі ^[[C. Тоді просто картографуйте ці коди втечі безпосередньо.

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

де ^[символом є втеча, яку ви можете вставити, натиснувши <CTRL-v><ESC>в vim.


Це не змінило поведінки мого вим.
outsmartin

Що надрукується, коли ви запускаєте кота в межах tmux і натискаєте клавіші?
Міка Фішер

^ [[1; 5С і ^ [[1; 5D. Гарна ідея, я не знав, як їх отримати. Просто спробував. Це працює! Дякую.
outsmartin

Чудово. Я відредагував свій передвідник, щоб включити метод отримання правильних кодів втечі.
Міка Фішер

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, щоб використовувати / очікувати більшість його послідовностей. Переконайтеся, що ви використовуєте screenтермін- базування TERM всередині 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>et ettera), якщо виявите, що використання 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
Гей, це спрацювало чудово!
Пабло Олмос де Агілера C.

2

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

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


1

Чи set t_Co=256взагалі допомагає налаштування у вашому ~ / .vimrc? Це лише налаштування кольору, але може допомогти усунути деякі проблеми.

Ви також можете перемалювати ctrl+Arrowключі в ~ / .vimrc, а також ...

Редагувати: ви спробували ctrl+Arrowна екрані сесії GNU? Я думаю, це може бути вашою проблемою.


це виглядає і чудово працює на екрані з xterm-256color
outsmartin

встановити t_Co = 256 робиться також
перехитрить

Чи допомогло щось із цього?
Сардатріон

На жаль, немає. Що ви точно маєте на увазі під remapign ctrl + стрілка? Я використовую їх уже перероблені для переключення вкладок у vim.
outsmartin

його відображено так: map <C-Right> gt
outsmartin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.