rubyのアウトライン解析で、開始をレベル1、終了をレベル2を使っています。
ブロックを認識する解析はプログラミング言語向けで重宝します。
rubyではendに対応する開始パターンをすべて記述しなければ対応が崩れてしまいます。そのため私としてはifやwhileなどはアウトラインに表示しなくて良いのですがすべて記述しています。それでも少し変わった記述をするとたちまち対応が崩れます。
開始 ^s*(module|def|class|if|while|loop|.*s+do)(?!w)(?!.*end)
終了 ^s*end(?!S)
ブロック開始と終了は同じ幅のインデントにすることが多いと思いますので、もし開始で指定したタグを終了で使えればつぎのように単純に指定できます。このようにするとブロック内部の記述が多少崩れても正しく対応してくれると思います。
開始 ^(s*)(module|def|class)(?!w)(?!.*end)
終了 ^(1)end(?!S)
また、開始・終了のペアを1組だけではなく3組指定できたらと思います。