Mapeando Ctrl com sinal de igual

10

Estou tentando mapear meu Ctrl e o sinal de adição juntos. Isto é o que estou tentando no meu vimrc:

nnoremap <C-=>    : echo "Hello" <CR> 

No entanto, parece que o mapeamento não está sendo acionado. Alguma sugestão sobre o que eu posso estar fazendo de errado? Estou usando o macvim.

James Franco
fonte
5
faq 20.4 e 20.5
Christian Brabandt 19/07/2016
11
Parece que este tipo de pergunta está cada vez mais freqüente: VIM como mapear a combinar chave: CTRL + SHIFT + w +,
mMontu
@ mMontu Sim, é uma pergunta bastante comum. Gostaria de saber se seria uma boa idéia escrever um post canônico sobre a representação interna de caracteres, códigos de terminação e o que o vim pode / não pode mapear.
James

Respostas:

17

Infelizmente, não há uma maneira confiável de mapear Ctrl-=.

Devido à maneira como os ctrl+keyacordes interagem com o terminal e são representados internamente, os únicos mapeamentos Ctrl que o Vim pode detectar são os definidos no padrão ASCII. Aqui está a lista completa dessas ctrl+keycombinações e o byte que cada um representa.

Ctrl-@                 0x00            NUL
Ctrl-A to Ctrl-Z       0x01 to 0x1A
Ctrl-a to Ctrl-z       0x01 to 0x1A
Ctrl-[                 0x1B            ESC
Ctrl-\                 0x1C
Ctrl-]                 0x1D
Ctrl-^                 0x1E
Ctrl-_                 0x1F
Ctrl-?                 0x7F            DEL

No entanto, observe que a maioria deles já tem uma função no Vim, e alguns são essencialmente idênticos a / indistinguíveis de outras teclas. por exemplo, CTRL-Mtem o mesmo código-chave que Enter, portanto, se você mapear um desses, também estará inevitavelmente mapeando o outro.

Fonte: Vim-FAQ

Você pode contornar as restrições acima configurando o seu terminal para enviar uma certa sequência de bytes para o seu mapeamento, como neste encadeamento de estouro de pilha , mas isso definitivamente será um problema. Pessoalmente, prefiro escolher um mapeamento diferente.

Isso pode eventualmente ser corrigido, mas é improvável, uma vez que o Vim depende do terminal em que está sendo executado. No entanto, há uma boa possibilidade de que isso funcione no Neovim. Não sei se isso funciona agora ou não.

James
fonte
11
Bom, estarei ligando pessoas a isso no futuro.
Tumbler41