特定の範囲にマッチする正規表現
textobj の範囲を視覚的に確認したかったのでちょっと書いてみた。
[ソース]
function! s:region_regex(first, last) if a:first == a:last return printf('\%%%dl\%%%dc', a:first[0], a:first[1]) elseif a:first[0] == a:last[0] return printf('\%%%dl\%%>%dc\%%<%dc', a:first[0], a:first[1]-1, a:last[1]+1) elseif a:last[0] - a:first[0] == 1 return printf('\%%%dl\%%>%dc', a:first[0], a:first[1]-1) \ . "\\|" . printf('\%%%dl\%%<%dc', a:last[0], a:last[1]+1) else return printf('\%%%dl\%%>%dc', a:first[0], a:first[1]-1) \ . "\\|" . printf('\%%>%dl\%%<%dl', a:first[0], a:last[0]) \ . "\\|" . printf('\%%%dl\%%<%dc', a:last[0], a:last[1]+1) endif endfunction echo s:region_regex([2,2], [4, 2]) echo s:region_regex([2,2], [2, 5]) echo s:region_regex([1,1], [1, 1]) echo s:region_regex([1,4], [2, 6])
[出力]
\%2l\%>1c\|\%>2l\%<4l\|\%4l\%<3c \%2l\%>1c\%<6c \%1l\%1c \%1l\%>3c\|\%2l\%<7c
だいぶごちゃごちゃしていますが、要は \%l と \%c を組み合わせて正規表現を生成しています。