Como mapear as teclas {Ctrl 0,-,=} no vim?
-
12-12-2019 - |
Pergunta
Layout do meu teclado (2ª linha):
`1...0-=Retrocesso
Quero mapear chamadas de função para Ctrl+ 0, -, =.
Esta é a função que criei:
" it doesn't work
nnoremap <C-=> :call IncFontSize(+1)<CR>
" it works
nnoremap <C--> :call IncFontSize(-1)<CR>
" it doesn't work
nnoremap <C-0> :call IncFontSize(0)<CR>
fun! IncFontSize(inc)
if !exists('+guifont')
return
endif
let s:defaultfont = 'Ubuntu Mono 12'
if a:inc==0 || empty(&guifont)
let &guifont = s:defaultfont
return
endif
let &guifont = substitute(&guifont, '\d\+$', '\=submatch(0)+'.a:inc, '')
endfun
Como posso mapear chamadas de função para essas chaves?
Solução
Observe como no modo de linha de comando, Ctrl-_ resulta em ^_
, mas Ctrl-0 e Ctrl-= não rende nada.
Devido à forma como a entrada do teclado é tratada internamente, diferenciando esta e muitas outras combinações de teclas (como Ctrl+Carta vs. Ctrl+Mudança+Carta) infelizmente não é possível hoje, mesmo no GVIM.Este é um ponto problemático conhecido e objeto de várias discussões no vim_dev e no canal de IRC #vim.
Algumas pessoas (principalmente Paul LeoNerd Evans) querem consertar isso (mesmo para o console Vim em terminais que suportam isso) e apresentaram várias propostas, cp. link
Mas até hoje, nenhum patch ou voluntário foi apresentado, embora muitos tenham expressado o desejo de ter isso em uma futura versão principal do Vim 8.
Outras dicas
http://vim.wikia.com/wiki/Fast_window_resizing_with_plus/minus_keys
apenas +
e -
...... sem nome alternativo
:nmap + :echo "hello world"<CR>
É isso que você quer?