Mapeando a tecla Alt esquerda no Vim?

12

Consigo mapear a combinação de teclas Right Alt+ Left Arrowcom <a-left>ou por <m-left>. Mas não consigo mapear a Left Altchave.

Existe uma maneira de fazer isso?

Edit:
Apenas para clareza <a-left>significa Alt+ Left Arrow.
A questão importante aqui é qual é a diferença entre Left Alte Right Altda perspectiva das principais impressões no Vim?

Yogesh Arora
fonte

Respostas:

14

Se você faz :help key-notationno vim, verá que os únicos modificadores que o Vim reconhece são shift, control, alt / meta (tratados como sinônimos) e a tecla de comando do Mac. Você pode facilmente usar o xmodmap para mapear sua tecla alt direita para um novo modificador que o Vim reconheça, mas talvez nenhum desses modificadores esteja sendo usado por você no momento. (Não sei se é possível fazer com que os sistemas Linux representem o modificador da chave de comando do Mac como o Vim vê.) Existem outros modificadores que o X reconhece: Mod4, Hyper e assim por diante, mas parece que o Vim acabou de ganhar ' não os vejo ou, pelo menos, não os posso vincular.

Outra opção é organizar a seta RightAlt-Left para gerar uma sequência de teclas específica, por exemplo, Esc- [MyUniqueGarbageHere. Isso é certamente possível, e então você pode dizer ao Vim para vincular isso a qualquer ação que desejar, diferente da sua tecla alt esquerda. A desvantagem disso é que você precisa fazer isso para cada combinação RightAlt + Key individualmente. Mas se você quiser fazer isso por algumas chaves, é muito viável.

A maneira exata de implementá-lo dependerá de você estar falando sobre o uso do Vim no X ou em um console Linux ou em algum outro ambiente. Suponho que você esteja falando sobre usá-lo no X.

  1. Use xmodmap para ligar o RightAlt, digamos, ao Mod3. Organize para que isso seja executado uma vez quando sua sessão X for iniciada. Algumas distribuições já possuem um arquivo / etc / X11 / xinit / xinitrc que carrega arquivos em locais específicos que contêm comandos xmodmap.

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. Eu uso o terminal urxvt. Ele permite definir combinações de teclas em um arquivo do tipo Xresources. Você poderia fazer isso em ~ / .config / Xresources; Eu faço isso em ~ / .config / app-defaults / URxvt. Eu colocaria uma linha como essa nesse arquivo (a sintaxe exata é sensível a qual arquivo você a colocou):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    

    Agora inicie um novo terminal, digite ctrl-V e digite RightAlt + Left. Você deve ver na linha de comando os caracteres ^ [[<Rota-esquerda>. Funciona? Boa.

  3. No seu ~ / .vimrc, coloque o seguinte:

    set t_Ff=^[<RAlt-Left>
    

O '^ [' aqui é um único caractere de escape. Cada um dos outros caracteres ('<', 'R', 'A' etc.) são eles próprios. Use o prefixo de chave "literal" do vim, seguido de uma fuga, para inserir o '^ [' (eu esqueço o que a chave "literal" é por padrão --- também ctrl-V, talvez?) T_Ff é apenas uma entrada de terminal não utilizada . Outro é t_Fg. Você pode usar :set termcapno vim para ver quais entradas do terminal estão atribuídas e apenas usar t_XX para alguns XX que não estão em uso. Siga a linha .vimrc apresentada acima com as seguintes:

    map <t_Ff> whatever-vim-keys-you-want-it-mapped-to
    map! <t_Ff> whatever-vim-keys-you-want-it-mapped-to

Também é possível fazer diretamente:

    map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to

No entanto, eu encontrei a técnica que usa uma entrada de terminal inativa para funcionar com muito mais confiabilidade.

Fiz várias suposições aqui: você está usando Linux, X e assim por diante. Se você estiver usando um programa de terminal diferente do urxvt, ele pode ou não fornecer técnicas poderosas de combinação de teclas o suficiente para fazer o que descrevi. Se você escolher chaves menos exóticas, ainda poderá fazer algo como eu descrevi aqui. Por exemplo, você pode solicitar que o RAlt-Left seja vinculado ao F21 e depois siga a partir daí. Deixe-nos saber quais são seus requisitos.

dubiousjim
fonte
Isso também se aplica ao gvim?
Glyph
Eu achei isso particularmente útil. Eu uso o lxterminal e quero mapear minha tecla alt no vim. No terminal, quando eu digitei Ctrl-V e, em seguida, meu combo de teclas desejado (Alt-T, por exemplo), cuspiu ^ [t. Usei isso no meu .vimrc em vez de <At> para executar o mapeamento (^ [é claro que é o caractere de escape único) e ele foi executado sem falhas. (^ [^ T também vincula Ctrl + Alt + T)
corretamente #