Remapeando Esc no MacVim irrita o próprio Vim

5

Eu tenho a seguinte linha no meu .vimrc :

nnoremap <Esc> :noh<Cr>

Isso funciona bem no MacVim. Sempre que eu abro o próprio Vim, sua "barra de comando" começa com:

.2c

Por que vale a pena, quando entrar para executar o comando, o Vim reclama com E16: Invalid range .

É um aborrecimento menor, mas como resolvo esse problema?

    
por Closure Cowboy 18.05.2011 / 05:55

2 respostas

3

O mapeamento Esc é sempre um pouco complicado e geralmente convida a esse tipo de problema, mesmo que não deva acontecer.

O método "canônico" para o seu mapeamento é:

nnoremap <silent> <C-l> :nohlsearch<CR><C-l>

Dessa forma, o Ctrl + L (que normalmente redesenha sua tela) deixará de destacar e redesenhar a tela.

Acho que descobri o que acontece, mas ainda não tenho solução. Assumi que o Vim recebeu uma string contendo <ESC> e "2c", então usei o seguinte mapeamento para torná-lo visível:

nnoremap <Esc> :"

Isso resultou no seguinte prompt na inicialização:

:"[>0;261;0c

O que significa que algo enviou <ESC>[>0;261;0c na inicialização. Agora, pesquisando as xterm seqüências de controle originais, descobrimos que:

ESC [         Control Sequence Introducer (CSI is 0x9b)

e

CSI > P s c

Send Device Attributes (Secondary DA).

P s = 0 or omitted → request the terminal’s identification code. The response depends on the decTerminalID resource setting. It should apply only to VT220 and up, but xterm extends this to VT100.

→ CSI > P p ; P v ; P c c

where P p denotes the terminal type

P p = 0 → ‘‘VT100’’.
P p = 1 → ‘‘VT220’’.

and P v is the firmware version (for xterm, this was originally the XFree86 patch number, starting with 95). In a DEC terminal, P c indicates the ROM cartridge registration number and is always zero.

Então, no meu caso, algo envia CSI > com P p = 0 (→ terminal tipo VT100), P v = 261 (→ meu xterm version) e P c = 0.

Ainda não tenho ideia de onde vem ou como pará-lo. Meu melhor palpite é que alguma troca de informações entre o terminal e o Vim falhe e algo esteja ligado.

    
por 18.05.2011 / 22:59
0

O problema é que algum terminal vim recebe [> 0; 261; 0c dessa forma. E o último "c" faz o vim começar a doer, mas eu encontrei um truque fácil para pular primeiro "c" na inicialização:

nnoremap c :nunmap c<Cr>
    
por 07.01.2013 / 23:37

Tags