Asignación de la tecla Alt izquierda en Vim?

12

Puedo mapear la combinación de teclas Right Alt+ Left Arrowcon <a-left>o por <m-left>. Pero no puedo asignar la Left Altclave.

¿Hay una manera de hacer eso?

Editar:
Solo para claridad <a-left>significa Alt+ Left Arrow.
La pregunta importante aquí es ¿cuál es la diferencia entre Left Alty Right Altdesde la perspectiva de las combinaciones de teclas en Vim?

Yogesh Arora
fuente

Respuestas:

14

Si lo hace :help key-notationen vim, verá que los únicos modificadores que reconoce Vim son shift, control, alt / meta (tratados como sinónimos) y la tecla de comando Mac. Puede usar fácilmente xmodmap para asignar su tecla alternativa derecha a un nuevo modificador que Vim reconozca, pero quizás ninguno de esos modificadores esté actualmente sin usar. (No sé si es posible hacer que los sistemas Linux representen el modificador de la tecla de comando de Mac como lo ve Vim). Hay otros modificadores que X reconoce: Mod4, Hyper, etc., pero parece que Vim acaba de ganar ' No los veo o al menos no puedo atarlos.

Otra opción es organizar la flecha derecha-izquierda-izquierda para generar una secuencia de teclas específica, por ejemplo, Esc- [MyUniqueGarbageHere. Esto es ciertamente factible, y luego podría decirle a Vim que lo vincule a cualquier acción que desee, que es diferente a la que está vinculada su tecla alt izquierda. La desventaja de esto es que debe hacerlo para cada combinación RightAlt + Key individualmente. Pero si solo quiere hacer esto por algunas teclas, es muy factible.

Exactamente cómo lo implemente dependerá de si está hablando de usar Vim en X o en una consola Linux, o en algún otro entorno. Asumiré que estás hablando de usarlo en X.

  1. Use xmodmap para vincular RightAlt a, digamos, Mod3. Haga arreglos para que esto se ejecute una vez cuando comience su sesión X. Algunas distribuciones ya tienen un archivo / etc / X11 / xinit / xinitrc que cargará archivos en ubicaciones específicas que contienen comandos xmodmap.

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. Yo uso el terminal urxvt. Permite definir combinaciones de teclas en un archivo de tipo Xresources. Puede hacerlo en ~ / .config / Xresources; Lo hago en ~ / .config / app-defaults / URxvt. Pondría una línea como esta en ese archivo (la sintaxis exacta es sensible a qué archivo lo pones):

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

    Ahora comience una nueva terminal, escriba ctrl-V y luego escriba RightAlt + Left. Debería ver en la línea de comando los caracteres ^ [[<RAlt-Left>. ¿Funciona? Bueno.

  3. En su ~ / .vimrc, ponga esto:

    set t_Ff=^[<RAlt-Left>
    

El '^ [' aquí es un único carácter de escape. Cada uno de los otros caracteres ('<', 'R', 'A', etc.) son ellos mismos. Use el prefijo de la tecla "literal" de vim, seguido de un escape, para ingresar el '^ [' (olvido cuál es la tecla "literal" por defecto --- ¿también ctrl-V, quizás?) T_Ff es solo una entrada de terminal no utilizada . Otro es t_Fg. Puede usar :set termcapen vim para ver qué entradas de terminal están asignadas, y simplemente use t_XX para algunos XX que no están en uso. Siga la línea .vimrc presentada anteriormente con las siguientes:

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

También es posible hacer directamente:

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

Sin embargo, he encontrado que la técnica que utiliza una entrada de terminal inactiva funciona de manera mucho más confiable.

Hice muchas suposiciones aquí: que estás usando Linux, X, etc. Si está utilizando un programa de terminal diferente a urxvt, puede proporcionar o no técnicas de combinación de teclas lo suficientemente potentes como para hacer lo que he descrito. Si elige teclas menos exóticas, aún puede hacer algo como lo que he descrito aquí. Por ejemplo, podría organizar que RAlt-Left se vincule a F21 y luego ir desde allí. Háganos saber cuáles son sus requisitos.

dubiousjim
fuente
¿Esto también se aplica a gvim?
Glifo
He encontrado esto particularmente útil. Uso lxterminal y quiero asignar mi tecla alt en vim. En la terminal, cuando escribí Ctrl-V y luego mi combinación de teclas deseada (Alt-T, por ejemplo), escupió ^ [t. Utilicé esto en mi .vimrc en lugar de <At> para realizar el mapeo (^ [por supuesto, siendo el único carácter de escape) y funcionó sin problemas. (^ [^ T también se une correctamente Ctrl + Alt + T)
elynnaie