vim-textobj-from_regexp で if 〜 then 間や式の右辺や左辺を取得したり

Lingr で『if 〜 then 間や式の右辺や左辺を取得したい』みたいな話があったので textobj-from_regexp で簡単にやってみた。


[ソース]

" if 〜 then
omap <expr> <Plug>(textobj-if-then)
\   textobj#from_regexp#mapexpr('if\zs\_.\{-}\zethen')
vmap <expr> <Plug>(textobj-if-then)
\   textobj#from_regexp#mapexpr('if\zs\_.\{-}\zethen')

" 左辺
omap <expr>  <Plug>(textobj-left-value)
\   textobj#from_regexp#mapexpr('^.\{-}\zs\k\+\ze\s*=.*$')
vmap <expr>  <Plug>(textobj-left-value)
\   textobj#from_regexp#mapexpr('^.\{-}\zs\k\+\ze\s*=.*$')

" 右辺
omap <expr> <Plug>(textobj-right-value)
\   textobj#from_regexp#mapexpr('^.\{-}=\s*\zs.*$')
vmap <expr> <Plug>(textobj-right-value)
\   textobj#from_regexp#mapexpr('^.\{-}=\s*\zs.*$')


これぐらいのレベルだと textobj-from_regexp でだいたいよさげ。
ただ、カーソルがその範囲よりも前にないとマッチしないので注意。
ここら辺をもうちょい細かく制御したいなら(行頭に移動してから検索するとか)自前で textobj 書かないとダメかなぁ…。