eskk.vimで句読点をピリオドとコンマ(カンマ)にする.ついでにsticky shiftで楽に入力
久しぶりの記事.
ニッチな分野の記事を書くことが多いが,中々ネタもないし.
eskk.vimというのはskkという入力方式をvimで使うためのプラグインだ.
skkに一度慣れると中々元には戻れない.
Plug 'tyuru/eskk.vim'
skkで小指が疲れると思っている人.
是非ともsticky shiftで検索して,shiftキーを別のキーに移すと幸せになれるだろう.
私の場合は;にshiftを割り当てている.
今回はこの設定についても説明しておこう.
ところで,論文を書いていると、句読点は全角の、。ではなく,.を使うことであろう.
この時,通常のeskkだとそのまま、。と入力されてしまう.
そこで句読点をコンマとピリオドに自動で変えたいのだが,その設定方法はドキュメントを見れば分かるのだが,
gogleとかで検索するとちょっと嵌まるかもしれない.
句読点をコンマとピリオドにする方法
私の場合は半角+スペースが気に食わないので,全角カンマ・ピリオドを使っている
結論
autocmd User eskk-initialize-pre call s:eskk_initial_pre()
function! s:eskk_initial_pre()
let t = eskk#table#new('rom_to_hira*', 'rom_to_hira')
call t.add_map(',', ',')
call t.add_map('.', '.')
call eskk#register_mode_table('hira', t)
let t = eskk#table#new('rom_to_kata*', 'rom_to_kata')
call t.add_map(',', ',')
call t.add_map('.', '.')
call eskk#register_mode_table('kata', t)
endfunction
基本は以下のサイトを参考にすればよいが,これだけだと設定できない.
そう,一行目のautocmd ...
が抜けているのだ.
vim scriptを読める人であれば分かるであろうが私は分からずはまった.
そこで:help eskk-initialize-pre
でヘルプを見るとちゃんと書いてあった.
以下にhelpの記載を抜粋する.
eskk-initialize-pre *eskk-initialize-pre*
-------------------
このフックは最初にeskkが有効化される前に一度だけ実行される。
毎回有効化された時点で行いたい場合は|eskk-enable-pre|フックを参照。
アルファベットテーブルの登録 *eskk-alphabet-table*
----------------------------
|eskk-initialize-pre|フックを利用して次のようにアルファベット変換テーブルを
定義することができる。
>
autocmd User eskk-initialize-pre call s:eskk_initial_pre()
function! s:eskk_initial_pre()
" ユーザはここで何か重たい初期化処理を実行することができる。
let t = eskk#table#new('rom_to_hira*', 'rom_to_hira')
call t.add_map('~', '~')
call t.add_map('zc', '©')
call t.add_map('zr', '®')
call t.add_map('tm', '™')
call t.add_map('z ', ' ')
" "1." のように数字の後のドットはそのまま入力
for n in range(10)
call t.add_map(n . '.', n . '.')
endfor
call eskk#register_mode_table('hira', t)
endfunction
" http://subtech.g.hatena.ne.jp/motemen/20110527/1306485690
" のeskkでの設定例。
" この方法は g:eskk#rom_input_style が"skk"でないと
" 最後のzが残ってしまうことに注意。
autocmd User eskk-initialize-pre call s:eskk_initial_pre()
function! s:eskk_initial_pre()
for [orgtable, mode] in [['rom_to_hira', 'hira'], ['rom_to_kata', 'kata']]
let t = eskk#table#new(orgtable.'*', orgtable)
call t.add_map('zw', 'w', 'z')
call eskk#register_mode_table(mode, t)
endfor
endfunction
細かな話
上のコードが何をしているのかについて説明する.
eskkでは日本語を入力するためにそのままのキーボードの入力から,
日本語(ひらがな)に対応するキーマップを持っている.
それが,eskk#table#new('rom_to_hira*', 'rom_to_hira')
だ.
この#
は実際にはパスの区切りになっている.
だから,eskk.vimをインストールした場所を見てみると,これがある.
私の場合はvim-plugを使っているので,こんな感じだった.
~/.vim/plugged/eskk.vim/autoload/eskk/table/rom_to_hira.vim
この中身は長いので全ては載せないが,抜粋すると,
function! eskk#table#rom_to_hira#load() abort
return {
\ 'a': ['あ', ''],
...
中略
...
\ '[': ['「', ''],
\ ']': ['」', ''],
\ '.': ['。', ''],
\ ',': ['、', ''],
\}
endfunction
まさにこの一番最後の二行が問題だ.
つまり,上のコードはこのテーブルを上書きしているのだ.
まあ,分かってしまえば何ということはない.
が,実装方法を知らないとeskk_initial_pre
で設定できる,
それはeskk_initialize_pre
で自動で呼び出されるようになっているなどなど,
内部の実装を知らないと気付かないよ-.というお話でした.
sticky shiftについて
eskkは素のままだとshiftを押して入力することで区切りを指定する.
でもゴリゴリ書いているとemacs症候群には比にならないレベルで小指がやられる.
左右のshiftを使い分けていてもだ!
skk特有の問題といえるが,大概のIMEにはこれを回避するための手段が用意されている.
これがsticky shiftだ.
このsticky shiftという名前について
本来sticky shiftという名前を聞くと,shiftキーを押すと,次のキー入力が大文字に変換される.
つまり,shiftキーを押したまま大文字にしたいキーを押さなくてもよくする機能だ.shift + a
ではなくshift -> a
でaを大文字入力できる機能だ.
でも通常sticky shiftという言葉が使われる場合には,この機能だけでなく,
shiftキー自体も別のキーに割り当てることを意味しているようだ.
vimでの実現方法
eskk自体にこのsticky shiftをサポートする機能はない.
したがって別のプラグインで代用する.
私が使っているのは以下のプラグインだ.
Plug 'lambdalisue/pinkyless.vim'`
小指奮闘記 (Vimmer の Vimmer による Vimmer のためのキーマッピング
このプラグインではデフォルトで;がshiftに割り当てられる.
Plugを入れるだけで何も設定しなくてもよいので楽だ.
こちらは日本語だけでなく,素の入力でも;がshiftに割り当てられてしまうため,
C言語使いやbash使いは;が入力し辛くなるので嫌かもしれない.
'''''''''''''''''''''''''''''''''''