Hatena::Groupfizzbuzz

id:tyruが<del>毎日</del>気が向いたらFizzBuzzを一生懸命書く日記

 | 

2016-10-29Vim のマッピングとレジスタを使って FizzBuzz このエントリーのブックマークコメント

なんか Gist の script タグを貼ったら「編集」のリンクが出なくなってしまった…

のでわざわざ http://fizzbuzz.g.hatena.ne.jp/tyru/edit?date=20161029URL に打ち込んで飛んだ。

→Gist に複数ファイル含めるようにしたので、やっぱり直接貼り付けるようにした。

https://gist.github.com/tyru/6e17ca16203f0e1a3a26c95e30c94e3c

"
" fizzbuzz-register.vim - FizzBuzz by mappings & register @n
"
" Mapping Flow:
" 1. doit
" 2. getchar:entry:{num}
" 3. getchar:{num}
" 4. fizzbuzz:{type}
"

nmap     <expr> doit join(map(range(1, 100), '"<SID>getchar:entry:".v:val."\<Esc>"'),'')

nmap     <expr> <SID>getchar:entry [setreg('n', '', 'c'), "<SID>getchar"][1]
nmap     <expr> <SID>getchar:0 [setreg('n', @n.'0', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:1 [setreg('n', @n.'1', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:2 [setreg('n', @n.'2', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:3 [setreg('n', @n.'3', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:4 [setreg('n', @n.'4', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:5 [setreg('n', @n.'5', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:6 [setreg('n', @n.'6', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:7 [setreg('n', @n.'7', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:8 [setreg('n', @n.'8', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:9 [setreg('n', @n.'9', 'c'), "<SID>getchar:"][1]
nmap     <expr> <SID>getchar:<Esc> "<SID>fizzbuzz:".str2nr((@n%5==0).(@n%3==0), 2)

nnoremap <expr> <SID>fizzbuzz:0 "o".@n."\<Esc>"
nnoremap        <SID>fizzbuzz:1 oFizz<Esc>
nnoremap        <SID>fizzbuzz:2 oBuzz<Esc>
nnoremap        <SID>fizzbuzz:3 oFizzBuzz<Esc>
 |