A solução dependeria do seu terminal e de como ele é configurado. Terminais Unix geralmente enviam meta personagem ou seqüência quando você espera Alt e pressione outra tecla. Existem duas formas tradicionais de enviar meta-caracteres para programas de terminal:
Pegue o valor ASCII da outra tecla pressionada (ou seja, a que não é Alt ) e OR
com 128 (definindo o bit 7 alto). Isso é desencorajado nos dias de hoje porque o código de caracteres de 8 bits resultante não é compatível com codificações UTF-8 ou mesmo de 8 bits, como o Latin-1.
Envie um caractere de escape, ASCII 27 e, em seguida, o código ASCII para a outra chave. Isso funciona bem com uma variedade de codificações, mas pode complicar o tratamento de casos em que você realmente pretendia enviar um caractere de escape explícito, por exemplo, quando você acertar Esc no Vim.
Se o seu terminal está configurado para usar o nº 2, você pode ficar tentado a fazer noremap <Esc><CR> viw
. No entanto, isso fará com que o Vim pause sempre que receber uma fuga. Para evitar isso, você pode set
a <A-CR>
Código chave e usar isso no map
; isso faz com que o Vim possa tratar a sequência como diferente de uma seqüência de escape + caractere (em particular, a sequência pode ter um tempo de espera muito menor que o usado por outros mapeamentos; já que os terminais enviam o caractere de escape e o caractere seguinte simultaneamente, isso pode proteger contra o acionamento acidental de um código de tecla quando você não está tentando).
o set
próprio comando interpreta cordas como <Esc>
literalmente (ou seja, não converte em ASCII 27), então você tem que envolvê-lo em um exec
:
exec "set <A-CR>=\<Esc>\<CR>"
Depois disso, você pode finalmente fazer um mapeamento:
noremap <A-CR> viw
Você provavelmente também quer definir um tempo muito curto ttimeoutlen
para que você não acione acidentalmente esse novo mapeamento com Esc Retorna , por exemplo.
:set timeout timeoutlen=3000 ttimeoutlen=100
faria com que os mapeamentos "normais" esperassem 3 segundos completos entre as teclas, mas os mapeamentos de código de chave duravam apenas um décimo de segundo.
Referências :
:h :set-termcap
:h :map-alt-keys
:h 'ttimeout'