Alt mapeamentos para vim em urxvt

3

Meus mapeamentos que contêm Alt não estão funcionando em vim quando usados em urxvt . Eles funcionam bem em gvim . Um exemplo de tal mapeamento

map <silent> <A-h> <C-w><

No modo de inserção, quando digito Alt-h , somente h é impresso. Como eu preciso configurar urxvt para que os mapeamentos que contenham Alt funcionem no vim? Eu estou usando o Ubuntu.

Opa, eu configurei meu modificador como super em urxvt. É por isso que nenhuma das soluções estava funcionando para mim. Certifique-se de definir o modificador como Alt para que as soluções propostas funcionem.

    
por ma08 30.04.2015 / 19:31

3 respostas

5

Quando você faz um mapeamento <A-x> no Vim quando x é um caractere imprimível (isto é, não um cursor ou tecla de seta), ele diz ao Vim para esperar aquele caractere com o oitavo / alto conjunto de bits o valor ASCII).

No seu exemplo, <A-h> significa que o Vim acionará o mapeamento quando você digitar è. O valor ASCII de h é 104 (binário 01101000) e quando você define o oitavo bit desse número, obtém o valor ASCII de 232 (binário 11101000).

O que acontece no urxvt e em muitos outros terminais é que a tecla Alt está configurada para enviar o caractere digitado com prefixo ao caractere Escape em vez de "adicionar 128". Neste caso, Vim semeia <Esc>h em vez de è, então o mapeamento não é acionado.

Isso deixa a você duas opções: reconfigurar seu terminal para fazer algo diferente com o modificador Alt ou adicionar mais mapeamentos ao Vim com <Esc>x além de <A-x> .

    
por 30.04.2015 / 21:25
3

Se você precisar inserir texto não ASCII, tente alterar seus mapeamentos em vim de <A-x> para <Esc>x .

Se você inserir apenas texto ASCII, poderá tentar lançar a opção urxvt with --meta8 e em vim set termencoding=latin1 .

Você também pode tentar outras soluções em:

link

    
por 30.04.2015 / 22:44
0

Estou descaradamente postando a resposta dada por u / jbaumy93 no reddit .

Aqui está o que estou usando agora,

Em ~/.Xresources , não estou configurando URxvt.meta8: true porque a codificação está quebrando quando eu a defino. Se eu usar set termencoding=latin , ele estará bagunçando os caracteres powerline. Decidi usar os Esc mappings como @graywh postou e usar a resposta vinculada acima para fazer isso.

Verifique também se o modificador está definido como Alt in urxvt . Eu tenho usado super como o modificador e nenhuma das soluções postadas funcionou.

Aqui está o snippet do meu vimrc

nnoremap <silent> <A-h> <C-w><
nnoremap <silent> <A-k> <C-w>-
nnoremap <silent> <A-j> <C-w>+
nnoremap <silent> <A-l> <C-w>>
function! Altmap(char)
  if has('gui_running') | return ' <A-'.a:char.'> ' | else | return ' <Esc>'.a:char.' '|endif
endfunction
if $TERM == 'rxvt-unicode-256color'&&!has('gui_running')
  set ttimeoutlen=10
  augroup FastEscape
    autocmd!
    autocmd InsertEnter * set timeoutlen=400
    autocmd InsertLeave * set timeoutlen=2000
  augroup END
  execute 'nnoremap <silent>'.Altmap('h').'<C-w><'
  execute 'nnoremap <silent>'.Altmap('k').'<C-w>-'
  execute 'nnoremap <silent>'.Altmap('j').'<C-w>+'
  execute 'nnoremap <silent>'.Altmap('l').'<C-w>>'
endif
    
por 01.05.2015 / 11:36

Tags