2014-10-13 2 views
0

Я работаю с Cygwin/Mintty/Vim.vim <C-S-Key> картирование

С <C-v> Я вижу, что <C-S-c> закодирован <83>. Это означает, что vim может прочитать его, и я могу сопоставить его с помощью команды map.

К сожалению, если я стараюсь:

:inoremap <C-S-c> foobar 

это не работает ...

Как я могу заставить его работать и почему ВИМ отказывается карту keystokes Unicode?

Тот же вопрос для <C-S-F1>. Если я выполнить эту команду:

:inoremap <C-S-F1> foobar 

я получить что-то вроде этого:

[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~[20;5~ 

Где F1 является [1;5P и F9 является [20;5~

ответ

2

Vim по-видимому, не поддерживает экзотические комбинации клавиш с участием Control (<C-…>). Это включает в себя F1 - хотя ваша вторая попытка отображения сдвигаCявляется поддерживается (и эквивалентно управления только с C). С постом по Tony Mechelynck на a forum thread “Mapping ctrl-; (ctrl semicolon)”:

Единственные печатаемые ключи, которые надежно могут быть использованы с Ctrl, с предсказуемыми результатами, в приготовленном режиме на любой операционной системе, являются те, которые определяются ASCII, а это означает следующее и НИКАКИЕ ДРУГИЕ:

  • ASCII символы 0x40 до 0x5F (т.е. прописные от а до Z, плюс шесть nonalpha символы на-знак, левый кронштейн, слэш, правая скобка, [каретки] и подчеркивание), где Ctrl вычитает 0x40, таким образом сопоставляя их с 0x00 до 0x1F соответственно. Это объясняет, почему Ctrl- [означает Esc, Ctrl-I означает вкладку, Ctrl-M означает «Ввод» и т. Д.
  • Строчные буквы, чей комбинатор Ctrl такой же, как для соответствующих прописных букв (таким образом, Ctrl + letter и Ctrl + Shift + letter: всегда одинаково для данной буквы)
  • Кроме того, Ctrl-? отображается в 0x7F (DEL).

Vim могут или не могут видеть другие Ctrl-комбинации, но это зависит от терминала, и в большинстве случаев он не будет видеть их, или смешивать их с что-то другое, например, как тот же ключ без Ctrl ,

Что касается вашего <C-S-c> отображения, я не совсем уверен, почему вы можете увидеть <C-S-c> с <C-v>, но вы не можете отобразить его. Когда я тестирую в MacVim (графический интерфейс), я получаю символ ^C, когда я пытаюсь выполнить <C-v><C-S-c>, а :inoremap <C-S-c> foobar работает.Когда я тестирую терминал OS X, терминал проглатывает нажатие клавиши и звуковые сигналы, как с <C-v>, так и с :inoremap. В обоих случаях поведение <C-v> соответствует :inoremap, поэтому я не знаю, почему вы видите несоответствие.

1

Из-за того, что ввод с клавиатуры осуществляется внутренне, к сожалению, сегодня это вообще невозможно, даже в GVIM. Некоторые комбинации клавиш, как Ctrl + неалфавитный не могут быть отображены, и Ctrl + письмо против Ctrl +сдвиг + письмо не может отличить. (Если ваш терминал не отправляет отдельный код termcap, который больше всего этого не делает.) В режиме ввода или командной строки попробуйте ввести комбинацию клавиш. Если ничего не происходит/не вставлено, вы не можете использовать эту комбинацию клавиш. Это также относится и к <Tab>/<C-I>, <CR>/<C-M>/<Esc>/<C-[> и т.д. (только исключение составляет <BS>/<C-H>.) Это известная точка боли, и предметом различных дискуссий по vim_dev и канала #vim IRC.

Некоторые люди (прежде всего Пол ЛевНерд Эванс) хотят исправить это (даже для консоли Vim в терминалах, которые поддерживают это), и предложили различные предложения, ср. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Но на сегодняшний день никаких пятен или добровольцев еще не вышли, хотя многие из них выразили желание иметь это в будущем выпуске Vim 8.

+0

спасибо, но кажется, что вы положили этот ответ повсюду (на самом деле вы точно ответили на три разных вопроса). Некоторая карта типа '' отлично работает в моем vim ... – nowox

+0

Правильно, я использую этот стандартный ответ, чтобы убедить Брэма, создателя Вима, решить эту общую точку боли и путаницы. Извините за «загрязнение» вашего вопроса; Надеюсь, у вас все еще есть какая-то информация, хотя это не решение вашей проблемы. –

+0

Если это по доброй причине, я прощаю тебя. Я также спросил об этом Брэма. Возможно, нам лучше подождать Неовим (http://neovim.org/) – nowox

Смежные вопросы