Vim で、mpl::string を使いやすくしてみる

mpl::string は、4文字ごとに分割しないとダメなので、コードを書くのがめんどくさかったりします。

// 4文字数えるのなんてめんどくさいよ!!
mpl::string<'yaki','niku','tabe','taiJ','P'> yakinikutabetaiJP;


こんな時は、Vim Script でやっちゃいましょう!って事で書いてみました。
Vim Script の内容はお察し下さい。

[_vimrc]

" mpl::string を4文字ごとに分割
" コマンドの呼び出し順がアレでアレです。
nnoremap <silent> <Space>s :BoostMPLStringSlice1<CR>:BoostMPLStringSlice2<CR>

" di' の後に getreg("*") で、削除した文字列を取得したかったので変な書き方に……
command!
    \ -nargs=* BoostMPLStringSlice1
    \ execute "normal! di'"
command!
    \ -nargs=* BoostMPLStringSlice2
    \ execute "normal! i".s:slice(getreg("*"))

function! s:slice(str)
    let l:result = strpart(a:str,0,4)
    let l:tmp = strpart(a:str, 4)
    while strlen(l:tmp) != 0
        let l:result = l:result."','".strpart(l:tmp, 0, 4)
        let l:tmp = strpart(l:tmp, 4)
    endwhile
    return l:result
endfunction

" mpl::string の表記を見やすくする
" set conceallevel=2 で、余計な、',' を消す
syntax match mpl_string /'\s*,\s*'\ze.*'\s*>/ transparent conceal

[使い方]

  1. mpl::string<'yakinikutabetaiJP'> と分割しないで書く
  2. ' 内にカーソルを合わせる
    • mpl::string<'{ここ}'>
  3. s で文字列を分割
  4. mpl::string<'yaki','niku','tabe','taiJ','P'> に変換される!!


あんまりテストしてないけど多分動くはず。
ものすごい遠回りでめんどくさいことをやってるけど、これ以上思いつかなかった……。
ん、文字の結合?知りませぬー。
しかし、normal モードのコマンドと Vim Script の連携難しい(気がする。
Vim Script は書くの大変だけど、便利だなー。
ああ、楽がしたいです。

[おまけ]

set conceallevel=2

で、mpl::string の表記を見やすくする。

[set conceallevel=0]

[set conceallevel=2]