Vim の textobj-from_regexp でコンフリクトした範囲を選択する

元ネタ


すでにプラグインがつくられたみたいなんですが、こういう正規表現だけで範囲を決定できるものは textobj-from_regexp を使うと簡単に定義することができます。

設定例

" <<<<<<< 〜 =======
map <expr> <Plug>(textobj-conflict-begin-a)
\   textobj#from_regexp#mapexpr('^\zs<<<<<<< \_.*\n=======\ze$')
map <expr> <Plug>(textobj-conflict-begin-i)
\   textobj#from_regexp#mapexpr('^<<<<<<< \zs\_.*\ze\n=======$')

" ======= 〜 >>>>>>>
map <expr> <Plug>(textobj-conflict-end-a)
\   textobj#from_regexp#mapexpr('^\zs=======\_.*\n>>>>>>> ')
map <expr> <Plug>(textobj-conflict-end-i)
\   textobj#from_regexp#mapexpr('^=======\zs\_.*\ze\n>>>>>>> ')

textobj-from_regexp 汎用性が高い。