2012-06-11 9 views
11

A volte uso vim di scrivere non-US di testo, e quando voglio utilizzare qualsiasi comando in modalità normale, ho bisogno di cambiare il layout a US. È possibile farlo automaticamente?Come cambiare automaticamente il layout della tastiera sul passaggio alla modalità normale vim?

PS. Posso fare mappature come this, ma in questo caso il comando assomiglia a: ц invece: w - non bello e rischio di errore di battitura.

Aggiornamento

Non voglio usare l'opzione mappa di tastiera, perché preferisco lingue switch CapsLock. ho cerco di scrivere autocmd per l'evento InsertLeave, ma non sono riuscito ...

Aggiornamento 2

Probabilmente qualcuno sa, perché il seguente non funziona?

function SetUsLayout() 
    !setxkbmap us,ru 
endfunction 

autocmd InsertLeave * call SetUsLayout() 
+0

La risposta qui è rilevante: http://stackoverflow.com/a/3777557/329063 – glts

+0

vedere [la mia risposta ] (http://stackoverflow.com/a/8152137/254635) per una domanda simile "[Vim‘fastidio’con layout di tastiera] (http://stackoverflow.com/q/8015231/254635)" piuttosto che quella collegato nel commento precedente, poiché copre effettivamente lo stesso problema ed è più completo. –

+0

Ho già scritto in Update, che non voglio usare l'opzione keymap, perché non è possibile mappare CapsLock in vim. – Kulti

risposta

3

sembra, che la soluzione cross-platform non esiste ... Così, sotto KDE Io uso il seguente:

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

autocmd InsertLeave * call SetUsLayout() 
4
:help langmap 

rischia di fornire tutte le informazioni che ti servono.

+0

"I caratteri inseriti in modalità riga di comando NON saranno influenzati da questa opzione." Quindi hjkl funziona bene, ma non i comandi. – Kulti

+0

Questo si occupa di ciò che hai chiesto: comandi in modalità normale. Vedi ': help keymap' per la modalità di comando. – romainl

+0

Ok, posso impostare keymap = russo-jcukenwin, ma per passare negli Stati Uniti ho bisogno di usare ctrl +^(o mappare qualsiasi altro), ma non è molto conveniente CapsLock. – Kulti

0

Per me, utilizzando qdbus è l'opzione migliore. Ho creato un plugin semplice ma fragile che funziona davvero bene per me: https://github.com/ironhouzi/bikey-vim/tree/master/plugin

Io lo chiamo fragile, poiché non ha molta robustezza ad esso se qualcun altro vuole usarlo.

voglio per lo più inglese quando sto usando Vim, con poche eccezioni. Quando voglio scrivere nella mia lingua madre, premo 'leader'-k e la barra di stato della mia compagnia aerea mostrerà che ho cambiato lingua. Quando la lingua non è l'inglese, lo script garantirà che ogni volta che si accede alla modalità di inserimento, la mia lingua madre viene impostata tramite qdbus. Ogni volta che lascio la modalità di inserimento, la lingua è impostata su inglese. Supporta anche le impostazioni individuali tra i buffer. Anche se questo potrebbe non essere il modo migliore di fare le cose, pensavo di condividerlo, nel caso che qualcun altro potesse farne un uso.

0

In Ubuntu Io uso il seguente:

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 meno lungo

silent !gsettings set org.gnome.desktop.input-sources current 0 
Problemi correlati