問題
ロシア語を話すVimユーザーの多くは、メール/スカイプ/ブラウザからVimに切り替えるときに、レイアウトを切り替えるのを忘れるという問題にしばしば遭遇したと思います。 さらなるイベントは次のように発展します。
- ロシア語の文字のマップはありません-Vimのきしみ音、あなたは誓い、レイアウトを切り替えます。
- あなたはロシア文字の地図を持っています-おそらくそれは曲がっていて、コマンドは実行されていません、Vimはきしみ、あなたは誓い、レイアウトを変更します。
明らかに、ロシアのキャラクターの地図は、抜け道ではありません。
解決策
正しい解決策は、通常モードでロシア語の文字を押してレイアウトを英語に切り替え、すでに押されているキーを入力することです。
実装
私が実装したかったのは、この動作でした。 スクリプト ( github )は非常にシンプルで簡単です。
まず、スクリプトが既にロードされているかどうかを確認します
if exists('g:loaded_rusmode') || &cp || version < 700 finish endif let g:loaded_rusmode = 1
次に、レイアウトを切り替えて押された文字を入力する関数を作成します。
function ChangeLayout(key) call system('osascript -e "tell application \"System Events\" to key code 49 using command down"') if a:key ==? ':' execute("normal! \<esc>:") else execute("normal!" . a:key) endif endfunction
そして、長くて退屈なnmapが続きます。
nmap <silent> <unique> :call ChangeLayout('q')<CR> nmap <silent> <unique> :call ChangeLayout('w')<CR> nmap <silent> <unique> :call ChangeLayout('e')<CR> ... nmap <silent> <unique> :call ChangeLayout('M')<CR> nmap <silent> <unique> :call ChangeLayout('<')<CR> nmap <silent> <unique> :call ChangeLayout('>')<CR>
私はMacOSを使用しているため、ソリューションはこのシステム専用に作成されています。 このアプローチを好むLinuxユーザーを尊敬しているなら-githubでプルリクエストを楽しみにしています。
setxkbmap -layout us
問題はありませんが、残念ながら、テストする方法はありません。