This repository has been archived by the owner on Mar 14, 2018. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is an attempt to introduce more modularity. Currenty
the codebase is structured around command model where
a new class is introduced for each new operation. I suggest
we change this to something better matching vim model.
Many vim commands take the following form:
<operator><text_object | motion>
.For example the following commands:
caw, daw, yaw, vaw, g~aw
all perform their actions on the same text object: a word under caret
and the surrounding white space.
This commit adds a single command ChangeCommand which takes
as argument a function which in turn returns a CommandRange.
The ChangeCommand acts on this range, i.e. cuts the text and
switches the text editor to Insert mode.
I made the argument a function to underline its purpose of
being a simple calculator. It should be a pure function in
mathematical sense: doesn't change any state, doesn't have
any side effects.
Only "a block" (
a(, a[, a{
) and "quoted string" text objects areimplemented in this commit. No refactoring to existing commands
was performed, but this should be trivial with the new architecture.