В VIM, как я могу заставить клавиши ESC и стрелки работать в режиме вставки?

StackOverflow https://stackoverflow.com/questions/8813855

  •  26-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

imap q <Up>

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

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

Я работаю внутри Tmux внутри iTerm2. Есть ли способ сделать переплету, подобную этой, живой только на одной панели TMUX? Или заставьте VIM сообщить TMUX, что он должен использовать привязки Crazy Arrow Key во время работы? Есть другие идеи?

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

Это было полезно?

Решение

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

Другие советы

В чем именно ваша проблема? Ваши клавиши стрелки работают в 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.

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

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

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

 set t_ku=^[OA
 set t_kd=^[OB
 set t_kr=^[OC
 set t_kl=^[OD
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top