Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5697

eskk.vimで句読点をピリオドとコンマ(カンマ)にする.ついでにsticky shiftで楽に入力

$
0
0

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を読める人であれば分かるであろうが私は分からずはまった.

Vimで文章を書くときに便利なプラグイン

そこで: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使いは;が入力し辛くなるので嫌かもしれない.
'''''''''''''''''''''''''''''''''''


Viewing all articles
Browse latest Browse all 5697

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>