Humanity

Edit the world by your favorite way

skk.vim と eskk.vim でデフォルトのマッピングを上書きする方法

skk.vim や eskk.vim ではデフォルトで多くの言語モードマッピング(:lmap,:lnoremap)を行うため、ユーザーが vimrc で追加したインサートモードやコマンドラインモードでのマッピングを覆い隠してしまう問題があります。 skk.vim でも eskk.vim でもこの問題に対処するため、言語モードマッピングをさらに上書きする仕組みを提供しています。

skk.vim

下記ではデフォルトのマッピング<C-j> を上書きして代わりに <Down> を割り当てています (:help g:skk_enable_hook)。

function! MySkkMap()
    lmap <buffer> <C-j> <Down>
endfunction
let g:skk_enable_hook = 'MySkkMap'

eskk.vim

eskk.vim で同じ事をする設定は以下のようになります (:help eskk-enable-post)。

autocmd User eskk-enable-post call s:eskk_enable_post()
function! s:eskk_enable_post()
    EskkMap -force <C-j> <Down>
endfunction

しかし現状ローマ字変換や漢字変換中にカーソル移動をすると eskk.vim 管轄外となるため、eskk.vim で管理している内部状態と食い違ってしまうためバッファの前後のテキストを削除してしまうというバグがあります。 同様の問題が skk.vim で起こらない理由は、skk.vim の実装があくまでバッファの直前の文字やマーカーを見ているためです。 eskk.vim の目標として SKK 以外のIMEも楽に実装できるようなプラットフォームを目指すというものだったためだったため、このような設計となっています (そして実装が追いついていない状態です…)。 eskk.vim でもカーソルが前回変換した位置より移動していた場合に内部状態をリセットするようにすればこの問題は解消するものと思われます。