Як отримати shift + стрілки та ctrl + стрілки, що працюють у Vim у tmux?


44

Це все в iTerm2 в OS X.

Я раніше мав

export TERM='xterm-256color'

в моїй .bashrc. Це означало, що Vim у tmux використовував 256 кольорів.

І одного разу я додав

set -g xterm-keys on

тоді комбінації клавіш із модифікаторами чудово працювали у Vim. А саме: shift+left/rightщо я відобразив перемикання вкладок Vim, ctrl+up/downщо я перемістив для переміщення ("бульбашки") рядки, і shift+left/rightякі працювали з поля, щоб стрибати за словом у режимі командного рядка (наприклад, коли вводити щось на зразок :e foo bar baz).

Однак у цій настройці виникла проблема, що колір фону Vim відображається лише за текстом, як згадується тут .

Тому я зняв

export TERM='xterm-256color'

від мого .bashrcі замість цього покладіть це в моє .tmux.conf:

set -g default-terminal "screen-256color"

Це виправило колір фону Vim, але порушило комбінації клавіш - вони роблять несподівані речі (переміщують курсор, видаляють текст).

Використовуючи ctrl+vдля вставлення дослівного виводу з комбінацій клавіш (як описано тут ), я зміг обійти його:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

Це змушує ярлики працювати, але це не здається правильним рішенням. Хтось може мені сказати, що тут відбувається, і як це виправити?

Відповіді:


68

Вам потрібно встановити параметр вікна tmux,xterm-keys щоб tmux передав ці ключі до своїх терміналів. Ви, мабуть, хочете помістити це у свої ~/.tmux.conf:

set-window-option -g xterm-keys on

Vim зазвичай автоматично налаштовує обробку цими клавішами, коли TERM є xtermчимось, але він пропускає це, оскільки TERM є screen-256color. Ви можете вручну налаштувати ці клавіші ~/.vimrcтак:

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option 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

Принаймні так вам не доведеться відображати всі різні комбінації.


Дякую! Це виглядає краще, ніж у мене, і я ціную пояснення. Одне, що було виправлено тим, що я мав, але не вашими рядками, - це те, що стрілки вгору / вниз не працювали в плагін Command-T, як описано тут: superuser.com/questions/237751/… Я щойно додав map <Esc>[B <Down>з одного відповідей. Здається, причиною є деякі погані припущення, зроблені самим плагіном.
Генрік Н

Щоб було зрозуміло, ваше рішення плюс map <Esc>[B <Down>та інша нитка означає, що зараз усе працює добре.
Генрік Н

@HenrikN Скажіть, будь ласка, що map <Esc>[B <Down>робить? Я не бачу різниці, додавши її до мого .vimrc-файлу.
Франческо Боккардо

@Francesco Boccardo: Якщо ви переходите за посиланням у моєму попередньому коментарі, а потім знову переходите за посиланням, ви потрапляєте на superuser.com/a/215181, який, здається, пояснює це з більшими подробицями :)
Henrik N

@HenrikN Дякую Тож це, мабуть, проблема, пов’язана з OSX, або, можливо, вона була вирішена за ці 7 років, тому що натискання команди (control?) + R не псує для мене клавіші зі стрілками vim in tmux (я в Linux).
Франческо Боккардо

8

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

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


1
Гарний! Чудова детективна робота.
Генрік Н

2
Це те, що я точно змінив: github.com/henrik/dotfiles/commit/… Кольори та клавіші модифікаторів, здається, добре працюють як зовні, так і всередині tmux.
Генрік Н
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.