Fix: Proper modes support

The vim code is now more maintainable, easier to understand and
extensible. This commit makes it easier to implement new modes, such as
the proposed ignore mode.