vimshell のプロンプトで遊んでみた
実は動的プロンプトとは全く関係ないんですが、vimshell で遊んでみました。
こんな感じでプロンプトがアニメーションします。
[ソース]
set updatetime=500 let g:vimshell_prompt = "<po><yo> > " let s:count = 0 let s:last_time = 0 function! s:get() let time = str2float(reltimestr(reltime())) let poyo =[ \ "(´・_・`)", \ "( ´・_・)", \ "( ´・_)", \ "( ´・)", \ "( ´)", \ "( )", \ "( )", \ "(` )", \ "(・` )", \ "(_・` )", \ "(・_・` )", \] if (time - s:last_time) > 0.45 let s:count += 1 let s:last_time = time endif return poyo[ s:count % len(poyo) ] endfunction function! s:update() let pos = getpos(".") let anim = s:get() let prev_anim = matchstr(getline("."), '<po>\zs.\{-}\ze<yo>') execute ':%s/<po>\zs.\{-}\ze<yo>/' . anim . '/g' call setpos(".", [pos[0], pos[1], pos[2] + strlen(anim) - strlen(prev_anim), pos[3]]) let b:vimshell.context.prompt_pattern = printf('^<po>%s<yo>\ >\ ', anim) endfunction function! s:vimshell() setlocal conceallevel=2 setlocal concealcursor=ni syntax match tagPoyoHiddenBegin /<po>/ conceal syntax match tagPoyoHiddenEnd /<yo>/ conceal augroup vimshell-poyo autocmd! autocmd CursorHold <buffer> call s:update() autocmd CursorHoldI <buffer> call s:update() augroup END endfunction augroup my-vimshell autocmd! autocmd FileType vimshell call s:vimshell() augroup END
処理自体は前回やった (*゚∀゚)o彡゚ミミミン!ミミミン!ウーサミン!! と同じ原理。
vimshell のプロンプトに『
これ系のアニメーションはいろんなところで試してみると面白そう。