Vim: Как отобразить Ctrl-M, не влияя также и на клавишу Return? - PullRequest
15 голосов
/ 14 октября 2010

Я хочу отобразить Ctrl - M на Ctrl - N в режиме вставки. Если я просто наберу imap <C-M> <C-N>, Ctrl - M начнет вести себя так же, как Ctrl - N , но затем нажмет Enter так же хорошо. Я хочу нажать клавишу Return, чтобы продолжить вставку новых строк, и в то же время заставить Ctrl - M вставить следующее совпадение завершения ключевого слова, как Ctrl - N делает. Это возможно?

EDIT: Мне удалось изменить исходный код Vim, чтобы безоговорочно обрабатывать Ctrl - M как Ctrl - N , не влияя на Return. При этом я также понял, что на самом деле нет способа сделать это без изменения исходного кода, так как различие между тем, что на самом деле было нажато - Enter или Ctrl - M , кажется, слишком рано исчезает при обработке нажатия клавиши. Это происходит в зависящих от платформы модулях пользовательского интерфейса, и переносимая часть кода при обработке нажатия клавиш уже не имеет представления, действительно ли были нажаты Ctrl - M или Return, что привело к коду 13 .

Мои модификации были в модулях GUI для FreeBSD (GTK) и Windows, так как это те платформы, на которых я чаще всего использую gvim.

P.S. Если кто-то захочет достичь того же, пожалуйста, не стесняйтесь, напишите мне.

P.P.S. Всем, кто предоставил ответы на этот вопрос: большое спасибо! Ваши комментарии мне очень помогли.

Ответы [ 4 ]

6 голосов
/ 14 октября 2010

:help key-notation ясно указывает, что CTRL-M эквивалентен Enter.Это потому, что возврат каретки является символом ASCII.13 и М - 13-я буква алфавита.

2 голосов
/ 18 июля 2013

Одним из способов сделать это (в зависимости от вашего терминала) является переназначение (в вашем терминале) клавиши return на C-J. C-J, похоже, действует как возврат почти во всех терминальных приложениях.

2 голосов
/ 19 октября 2010

Если вы используете Windows, вы, вероятно, можете использовать Autohotkey для переназначения Ctrl-M в режиме вставки, если активное окно vim.

Возможно, скрипт ahk будет выглядеть примерно так:

 #IfWinActive, Write: ahk_class GVIM
 ^M::^N

В качестве альтернативы, вы можете подумать о том, чтобы поработать над своими навыками набора текста на клавиатуре (я сомневаюсь, что вы хотите услышать это решение, но я все еще думаю, что это правильное предложение), чтобы избежать путаницы по Ctrl-M и Ctrl-N.

Если вы используете какой-то вариант Linux, я не уверен, какие инструменты могут быть эквивалентны autohotkey.

Другой альтернативой является сопоставление совершенно другого ключа, чтобы позволить вам выполнять автозаполнение вместо использования ctrl-n, например Ctrl-K: :inoremap <c-k> <c-n>

2 голосов
/ 14 октября 2010

Следующее будет обрабатывать CTRL-M (или Enter, как указал Бенуа) как CTRL-N, когда всплывающее меню видно, и возвращаться к своей работе по умолчанию, когда всплывающее меню не видно.

:inoremap <C-M> <C-R>=pumvisible() ? "\<lt>C-N>" : "\<lt>C-M>"<CR>

Для этого необходимо вызвать всплывающее меню, используя CTRL-N или CTRL-P, прежде чем использовать CTRL-M в качестве CTRL-N.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...