Emacs使っていた頃につかっていた sequential-command.el (の <C-a>
と<C-e>
のみ)みたいなこと出来ないかな?と、vimrcを頑張ってみた。
いろいろ拙いし考慮漏れもあるような気がするけどとりあえず出来たので書いてみる。
※車輪が再開発されている可能性は否めない
.vimrc(一部)
"ローテート {{{function!s:save_pos()letb:cur_pos = getpos('.')endfunction
autocmd WinEnter,BufRead * call<SID>save_pos()nnoremaphh:<C-u>call<SID>save_pos()<CR>nnoremapjj:<C-u>call<SID>save_pos()<CR>nnoremapkk:<C-u>call<SID>save_pos()<CR>nnoremapll:<C-u>call<SID>save_pos()<CR>nnoremapbb:<C-u>call<SID>save_pos()<CR>nnoremap<C-b><C-b>:<C-u>call<SID>save_pos()<CR>nnoremap<C-f><C-f>:<C-u>call<SID>save_pos()<CR>function!s:rotate_in_buffer(r)let pos_f= getpos('.')if pos_f == [b:cur_pos[0],1,1,b:cur_pos[0]]
call setpos('.',b:cur_pos)returnendif
execute a:r ? "normal! ^" : "normal! $"let pos_s= getpos('.')if pos_f == pos_s
execute a:r ? "normal! 0" : "normal! G$"let pos_t = getpos('.')if pos_s == pos_t
ifa:r
execute "normal! gg^"elsecall setpos('.',b:cur_pos)endifendifelseifa:r&& pos_s[1] ==b:cur_pos[1] && pos_f[2] < pos_s[2]
execute "normal! gg^"endifendfunctionnnoremap<silent><C-a> :<C-u>call<SID>rotate_in_buffer(1)<CR>nnoremap<silent><C-e> :<C-u>call<SID>rotate_in_buffer(0)<CR>"}}}
<C-a>
を上書いてしまっていいのかは謎い。