Estoy en la posición ligeramente inusual de usar dos diseños de teclado diferentes de forma regular ( Programmers-Dvorak y Turkish-F ). Estos diseños son bastante diferentes entre sí y solo soy capaz de dominar vim con un conjunto de recuerdos musculares. Soy bastante competente con los comandos vim en el diseño Dvorak, pero es casi imposible de usar si mi teclado está en el diseño turco-F. Desafortunadamente, edito regularmente archivos en inglés y turco e incluso en idiomas mixtos. Mi dominio es tal que puedo escribir bien cualquier idioma en su respectivo diseño de teclado, pero mi cerebro se niega a conectarlos y escribir incluso algunas letras de una palabra en turco desde el diseño de Dvorak o viceversa.
Tengo enlaces de saludo de dos teclas para cambiar el diseño en Xorg, pero incluso esto me deja con un flujo de trabajo incómodo en vim cuando edito archivos de idiomas mixtos:
<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>
Me gustaría poder acortar esto a algo como:
<vim commands…><leader>i…content…<escape><vim commands…>
... de modo que el uso <leader>i
establece un conjunto de :imap
valores para emular el diseño turco sin cambiar el diseño del teclado del sistema. Al mismo tiempo, i
cambiaría al modo de inserción pero sin los :imap
valores adicionales . Los valores en sí mismos son fáciles, solo necesito las asignaciones del alfabeto como estas:
:imap a u
:imap A U
:imap o i
:imap O İ
"etc.
La pregunta es, ¿Cómo configurar dos modos de inserción, un modo de inserción normal y un seudo modo de inserción que es idéntica a excepción de un grupo de asignaciones, y cómo puedo activar estos modos con <leader>i
, <leader>a
, etc.?
InsertEnter
yInsertLeave
, que puede usar para cambiar diseños automáticamente. Específicamente, en elInsertLeave
puede verificar si es turco, si es así, cambie a Dvorak, establezca una bandera, y cuando ingrese insertar nuevamente, vuelva a cambiar a turco si ese fue el caso la última vez que dejó el modo de inserción.:imap
que funcionaría incluso en una sesión ssh remota o cuando$DISPLAY
no está configurado de otra manera.Respuestas:
Vim tiene algo como esto en forma de mapas de teclas . De
:help mbyte-keymap
:El bloqueo de mayúsculas solo en modo de inserción describe dicha asignación para la emulación de bloqueo de mayúsculas; Como puede ver allí, el archivo de asignaciones es similar a lo que describe en su pregunta.
Habilita esta configuración vía
:set iminsert=1
o dinámicamente víai_CTRL-^
. También funciona/search
con la'imsearch'
opción.fuente
La respuesta de Ingo Karkat parece que fue exactamente la solución correcta y ha resuelto mi situación. Sin embargo, aquí hay un poco más de instrucciones detalladas para cualquier persona que recién esté comenzando con las funciones del mapa de idiomas de vim.
Primero, necesita un archivo de mapa de idiomas. Como en el ejemplo de Bloqueo de mayúsculas, querrás poner algo como lo siguiente
~/.vim/keymap/dvorak2turkishf.vim
(descarga mi mapeo completo de Githu b):Con eso en su lugar, queda por configurar enlaces para activarlo en algunos casos, pero no en otros. Querrás agregar algo a tu
~/.vimrc
archivo.Primero, vincule el mapa de teclas de búsqueda al de entrada:
Luego establezca qué mapa de teclas se usará para el modo de entrada en otro idioma:
Desactive el modo de entrada alternativo para que, por defecto, no haya cambios:
Configure un comando automático para que se ejecute siempre que salga del modo de inserción para desactivar el interruptor de idioma alternativo:
Agregue enlaces para todas las diversas formas en que puede terminar en el modo de entrada de idioma alternativo para que al usar
<leader>
(Generalmente\
) antes de ellos, active el mapa de idioma antes de cambiar:Establezca un color de cursor diferente para cuando el mapa esté habilitado:
Todos juntos, esto es lo que cambió en mi configuración . Como nota final, una vez que esté en modo de inserción puede activar y desactivar la opción de mapa de idioma usando
<ctrl>+^
.fuente