2012-06-11 10 views
11

A veces uso vim para escribir texto que no sea en los EE. UU., Y cuando quiero usar cualquier comando en modo normal, necesito cambiar el diseño a EE. UU. ¿Es posible hacer eso automáticamente?¿Cómo cambiar automáticamente el diseño del teclado al cambiar al modo normal de vim?

PS. Puedo hacer un mapeo como this, pero en este caso el comando se ve así: ц en su lugar: w - no es bonito y el riesgo de error tipográfico.

actualización

no quiero utilizar la opción de mapa de teclas, porque prefiero idiomas de conmutación por CapsLock. He trato de escribir autocmd para el evento InsertLeave, pero no pudo ...

Actualización 2

Probablemente nadie sabe, ¿por qué los siguientes no trabajar?

function SetUsLayout() 
    !setxkbmap us,ru 
endfunction 

autocmd InsertLeave * call SetUsLayout() 
+0

La respuesta en este caso es relevante: http://stackoverflow.com/a/3777557/329063 – glts

+0

Ver [mi respuesta ] (http://stackoverflow.com/a/8152137/254635) a una pregunta similar "[Vim" fastidio "con diseños de teclado] (http://stackoverflow.com/q/8015231/254635)" en lugar de uno vinculado en el comentario anterior, ya que cubre efectivamente el mismo problema y es más completo. –

+0

Ya escribo en Actualización, que no quiero usar la opción de mapa de teclas, porque no es posible asignar CapsLock en vim. – Kulti

Respuesta

3

Parece, que la solución multiplataforma no existe ... Así, bajo KDE utilizo el siguiente:

function! SetUsLayout() 
    silent !qdbus org.kde.keyboard /Layouts setLayout us > /dev/null 
endfunction 

autocmd InsertLeave * call SetUsLayout() 
4
:help langmap 

es probable que proporcione toda la información que necesita.

+0

"Los caracteres ingresados ​​en el modo de línea de comandos NO se verán afectados por esta opción". Entonces hjkl funciona bien, pero no ordena. – Kulti

+0

Esto trata de lo que usted solicitó: comandos de modo normal. Ver ': help keymap' para el modo de comando. – romainl

+0

Ok, puedo establecer keymap = russian-jcukenwin, pero para cambiar a EE. UU. Necesito usar ctrl +^(o asignar cualquier otro), pero no es muy conveniente CapsLock. – Kulti

0

Para mí, usando qdbus es la mejor opción. He hecho un plugin simple pero frágil que funciona muy bien para mí: https://github.com/ironhouzi/bikey-vim/tree/master/plugin

Lo llamo frágil, ya que no tiene mucha solidez si alguien más quiere usarlo.

Principalmente quiero inglés cuando estoy usando Vim, con algunas excepciones. Cuando quiero escribir en mi idioma nativo, pulso 'leader'-k y la barra de estado de mi aerolínea muestra que he cambiado de idioma. Cuando el idioma no es inglés, el script se asegurará de que cada vez que entro al modo de inserción, mi idioma nativo se configure mediante qdbus. Cada vez que dejo el modo insertar, el idioma vuelve al inglés. También es compatible con configuraciones individuales entre búferes. Aunque esta podría no ser la mejor manera de hacer las cosas, pensé en compartirla, en caso de que alguien más pudiera sacarle provecho.

0

En Ubuntu utilizo el siguiente:

function! SetUsLayout() 
    silent !qdbus org.gnome.SettingsDaemon.Keyboard /org/gnome/SettingsDaemon/Keyboard org.gnome.SettingsDaemon.Keyboard.SetInputSource 0 > /dev/null 
endfunction 

autocmd InsertLeave * call SetUsLayout() 

o más corto

silent !gsettings set org.gnome.desktop.input-sources current 0 
Cuestiones relacionadas