В Vim, как я могу заставить клавиши Esc и стрелки работать в режиме вставки? - PullRequest
3 голосов
/ 11 января 2012

Терминалы отправляют клавиши со стрелками в виде последовательностей, начинающихся с Esc.В Vim есть опция 'esckeys', которая позволяет клавишам, начинающимся с Esc, работать в режиме вставки.Он делает это за счет фактической клавиши Esc, которая немедленно реагирует, потому что Vim больше не знает, просто нажимаете ли вы Esc или начинаете писать клавишу со стрелкой.

Вот что яхотелось бы иметь возможность делать в режиме вставки:

  1. Нажмите клавишу со стрелкой и курсор переместится в этом направлении, а
  2. Нажмите Esc и выйдитенемедленно вставьте режим.

У меня есть начало решения.Даже с :set noesckeys я все еще могу сопоставить клавишу с <Up> следующим образом:

imap q <Up>

Конечно, q не является хорошей клавишей для повышения курсора.Вместо этого я хотел бы сопоставить мои клавиши со стрелками моего эмулятора терминала с чем-то, что не начинается с Esc (как некоторые случайные символы Юникода, которые я никогда не наберу), а затем imap с указаниями в Vim.

Проблема в следующем: когда я покидаю Vim, мои клавиши со стрелками перестают работать.Только Vim знает, что они значат сейчас.

Я работаю внутри tmux внутри iTerm2.Есть ли способ сделать такую ​​привязку вживую только в одной панели tmux?Или заставить Vim сообщить tmux, что он должен использовать сумасшедшие привязки клавиш со стрелками во время работы?Любые другие идеи?

(Кстати, я был бы рад просто не использовать клавиши со стрелками в режиме вставки вообще сам, но я соединяюсь с людьми, которые ожидают, что они будут работать, и я хочу быть вежливой парой.)

Ответы [ 4 ]

6 голосов
/ 11 января 2012

В чем конкретно ваша проблема? Ваши клавиши со стрелками работают в Vim или нет? Они работают в tmux или нет?

У меня была проблема с клавишами со стрелками, отображающими управляющие символы ([A, [B…) в Vim / tmux один раз, я решил ее, добавив

nnoremap <Esc>A <up>
nnoremap <Esc>B <down>
nnoremap <Esc>C <right>
nnoremap <Esc>D <left>
inoremap <Esc>A <up>
inoremap <Esc>B <down>
inoremap <Esc>C <right>
inoremap <Esc>D <left>

на мой ~/.vimrc.

2 голосов
/ 25 марта 2013

Просто установите ttimeoutlen (примечание: два ведущих t с, а не один) на очень маленькое значение. Что-то около 10 миллисекунд, но может работать даже с нуля. С любым положительным значением ttimeoutlen вы получите почти немедленный выход (он будет ждать этого количества миллисекунд), а если он установлен на ноль, он должен быть немедленным (это означает, что он вообще не будет ждать завершения клавиш со стрелками: либо вся последовательность в буфере stdin и считается клавишей со стрелкой или нет и считается последовательностью независимых символов). У меня 100 миллисекунд, и я не замечаю этого тайм-аута.

0 голосов
/ 11 июля 2018

Если кто-то, использующий Windows 10, придет сюда, я могу рассказать вам, что сработало для меня. : установить термин = ANSI

Вы можете поместить это в свой файл .vimrc или просто установить его в редакторе, чтобы увидеть, будет ли он работать.

0 голосов
/ 25 марта 2013

это сработало для меня: добавьте следующие строки в ваш файл .vimrc (введите Ctrl-V и нажмите курсор вверх для ^ [OA ...):

 set t_ku=^[OA
 set t_kd=^[OB
 set t_kr=^[OC
 set t_kl=^[OD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...