設定 Vim 將 qwerty 鍵盤轉為 dvorak 鍵盤

By Shaform, Tue 09 July 2013, in category Notes

dvorak, qwerty, vim, vimrc

還記得從前在交大參加校內程式競賽時,Fedora?/FreeBSD? 環境裡頭不知為何無法透過圖形界面執行鍵盤設定,也找不到 setxkbmap,以至於無法使用 dvorak 的窘境。每每被迫使用 qwerty 來競賽,總是覺得慢人一截。一直在研究有什麼方法可以用 command line 或設定檔強制轉換鍵盤,不過始終無果。最近用到 Red Hat Enterprise Linux 又遇到很類似的問題,同時也發現透過 rdp 連進機器時,設定的方法似乎會跟平常不太一樣。

雖然 Google 良久還是沒有太多進展,但最近研究 vim 設定時突然發現可以直接修改 vim 的鍵盤對應,如此一來至少在用 vim 寫程式時能夠使用自己習慣的鍵盤排列。

只要在 .vimrc 中加入如下設定,就可以在 vim 大部分的模式中直接轉換成 dvorak 鍵盤:

set keymap=dvorak
set langmap=-=qwertyuiop[]sdfghjkl\\;'zxcvbn\\,./_+QWERTYUIOP{}SDFGHJKL:\"ZXCVBN<>?;[]'\\,.pyfgcrl/=oeuidhtns-\\;qjkxbwvz{}\"<>PYFGCRL?+OEUIDHTNS_:QJKXBWVZ

keymap 可以修改輸入模式的對應,langmap 則是一般及 visual 模式等指令的按鍵,後面那串其格式可參考 :help 'langmap',基本上是先打 qwerty 的按鍵,加個分號,再打上轉換成的 dvorak 按鍵,不過 , 和 ; 需要在前面補上 \," 則是要補上 \。這設定唯一無法轉換的部份是 ":" 開頭的指令模式。此外,如果 set keymap 沒有作用的話,或許是系統缺少 dvorak 的 keymap,此時建立 ~/.vim/keymap/dvorak.vim 檔案,插入 dvorak.vim 的內容即可。

這方法雖然有些不完美與費工,但是在比賽開始前的準備時間應該是可以完成的。至於有沒有什麼更好的解決方法呢?只能看看未來有沒有機會發現了。

雖然或許也能透過類似 QIDO 等硬體方式解決,不過這個偶爾才會用到的零件實在是貴到無法下手的地步啊。