2012-06-11 122 views
11

有時我用vim編寫非美國文本,當我想在普通模式下使用任何命令時,我需要將佈局更改爲美國。可以自動執行此操作嗎?如何自動更改切換到vim正常模式的鍵盤佈局?

PS。我可以做像this這樣的映射,但在這種情況下,命令看起來像:ц,而不是:w - 不漂亮,錯字風險。

更新

我不想用鍵盤映射選項,因爲我用的CapsLock喜歡切換語言。 我嘗試寫自動命令爲InsertLeave事件,但沒有成功......

更新2

也許有人知道,爲什麼下面不工作?

function SetUsLayout() 
    !setxkbmap us,ru 
endfunction 

autocmd InsertLeave * call SetUsLayout() 
+0

這裏的答案是相關的:http://stackoverflow.com/a/3777557/329063 – glts

+0

參見[我的回答](http://stackoverflow.com/a/8152137/254635)到類似的問題「[Vim」煩惱與鍵盤佈局](http://stackoverflow.com/q/8015231/254635)「」而不是一個與之前的評論相關聯,因爲它實際上涵蓋了同樣的問題,而且更爲徹底。 –

+0

我已經寫入Update,不想使用keymap選項,因爲無法在vim中映射CapsLock。 – Kulti

回答

3

模樣,跨平臺的解決方案是不存在......因此,KDE下我使用以下命令:

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

autocmd InsertLeave * call SetUsLayout() 
4
:help langmap 

可能提供您需要的所有信息。

+0

「在命令行模式下輸入的字符不會受此選項影響。」所以hjkl工作正常,但命令不行。 – Kulti

+0

這處理你所要求的:普通模式命令。有關命令模式,請參閱':help keymap'。 – romainl

+0

好吧,我可以設置keymap = russian-jcukenwin,但切換到美國我需要使用Ctrl + ^(或映射任何其他),但不是很方便CapsLock。 – Kulti

0

對我來說,使用qdbus是最好的選擇。我製作了一個簡單但易碎的插件,對我來說效果非常好:https://github.com/ironhouzi/bikey-vim/tree/master/plugin

我稱它爲脆弱的,因爲如果其他人想要使用它,它就沒有多少健壯性。

當我使用Vim時,除了少數例外情況,我主要想要英語。當我想用我的母語寫作時,我打了'leader'-k,我的航空公司狀態欄會顯示我已經換了語言。當語言不是英語時,腳本將確保每次進入插入模式時,我的母語都通過qdbus設置。每次我離開插入模式時,語言都會重新設置爲英語。它還支持緩衝區之間的個別設置。儘管這可能不是做事情的最佳方式,但我想我會分享它,以防其他人可能會使用它。

0

在Ubuntu中,我使用以下命令:

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() 

或更短

silent !gsettings set org.gnome.desktop.input-sources current 0 
相關問題