branch: elpa/evil-emacs-cursor-model-mode
commit e350ec25898c55b135b2bd608fa7fd135bbcd0ba
Author: maxfriis <[email protected]>
Commit: GitHub <[email protected]>
A few clarifying changes in the documentation
Among other things I have changed the wording of Vim's normal state cursor
model from a cursor on characters model to a cursor on top of characters model.
---
README.org | 48 ++++++++++++++++++++++--------------------------
1 file changed, 22 insertions(+), 26 deletions(-)
diff --git a/README.org b/README.org
index 08e0e7de72..fd9cf4dd87 100644
--- a/README.org
+++ b/README.org
@@ -13,10 +13,10 @@ Supposedly this is convertible to GPL 3.
*** Thanks
-Toby Cubitt coded the cursor model.\\
+Toby Cubitt coded the motions in the cursor model.\\
[[https://www.dr-qubit.org/Evil_cursor_model.html]]
-*** Install
+** Install
Download evil-emacs-cursor-model-mode.el, open and install it with
(package-install-from-buffer).
Add the following code to your init.el:
@@ -28,8 +28,8 @@ Add the following code to your init.el:
** Cursor models
Vim works with two cursor models.
-A cursor /on/ characters model in normal-state and /between/ characters in
insert-state.
-The evil-emacs-cursor-model-mode unify these to a cursor between model in both
states.
+A cursor /on top of/ characters model in normal-state and /between/ characters
in insert-state.
+The evil-emacs-cursor-model-mode unify these to a cursor between model in all
states.
Furthermore it becomes natural to change some keybindings in this framework.
That is my sacrilege to "the church of Vim".
@@ -39,17 +39,18 @@ Evil-mode's modal interface is preserved.
Even though or maybe because I come from the Emacs world, I don't like layers.
=<shift>= just like =<ctrl>= is a layer and I try to minimize the use of them
in keybindings.
-To do this the mode will change three keybindings in Vim's normal-state keys.
+To do this the mode will change three keybindings in evil-mode's normal-state
keys.
*** The =a= binding
First and foremost Vim's =a= in normal-state makes little sense.
-With this mode (evil-append) is just move forward (=l=) and enter insert-state
(=i=).
-That is how you think if you adopt the mode's cursor model.
+Evil-mode's (evil-append) is just =l= (evil-forward-char) and =i=
(evil-insert).
+That is how you should think if you adopt the mode's cursor model.
-Therefore I bind evil-mode's (evil-append-line) to =a=.
+Therefore I bind =a= to (evil-append-line).
-Binding (evil-append-line) makes sense in a cursor between model, whereas
(evil-append) does not.
+Entering insert state at the end of line (evil-append-line) makes sense in
this mode, whereas (evil-append) does not.
+You are free to rebind =A= in evil-emacs-cursor-model-mode-map.
*** The =p= and =o= bindings
@@ -59,20 +60,21 @@ Move forward and paste is strange to prioritize with a one
letter lower case bin
Therefore I swap evil-mode's =p= and =P=.
-When you use the mode, you might find yourself only using one paste command.
+When you use the mode, you might find yourself only using the
(evil-paste-before) command.
Vim's need for two paste commands is compensation for the normal-state cursor
model.
-Other editors usually only have one paste command and it's also natural to
mainly have one in this mode.
-The new =P= is still bound and can be useful, but you can contextually replace
it with =jp= or =lp=.
+Other editors only have one paste command and it's also natural to mainly have
one in this mode.
+The new =P= (evil-paste-after) is still bound and can be useful, but you can
contextually replace it with =jp= or =lp=.
Last I swap Vim's =o= and =O= so their case are consistent with =p= and =P=
when you paste lines.
*** Summary
-This is all normal-state bindings:
+These are all normal-state keybindings:
| This mode's binding | Vim's binding | Alternative | Lisp function
|
|---------------------+---------------+-------------------+---------------------|
| =a= | =A= | =$i= | (evil-append-line)
|
+| =A= | =a= | =li= | (evil-append)
|
| =o= | =O= | | (evil-open-above)
|
| =O= | =o= | =jo= and =a<RET>= | (evil-open-below)
|
| =p= | =P= | |
(evil-paste-before) |
@@ -120,10 +122,6 @@ Ultimately the modal framework is about editing text
(working with the current l
The main drawback is that it will be harder to work efficiently with an
unconfigured Vi, Vim or evil-mode editor.
The former mentioned muscle memory will work against you.
-This is often mentioned as an advantage of Vim over Emacs.
-Everyone personalize Emacs' default keybindings.
-You are more likely to have Vim's default keybindings available, if you sit
down with someone else's Vim box.
-
*** Combined command and motion
The mode does have things that become less natural or harder.
@@ -135,7 +133,7 @@ That is a real cost, since a combined command and motion
can sometimes be utiliz
A more useful application of the command/motion behavior is Vim's =xp= which
/swap/ two characters and move the cursor forward.
The lisp function (transpose-chars) does roughly the same thing without
involving the kill ring.
-I bind it to =gs= in my init.el, but this is not a part of the mode.
+I bind it to =gs= in my init.el, but this is /not/ a part of the mode.
#+begin_src emacs-lisp
(bind-keys
:map evil-normal-state-map
@@ -143,27 +141,25 @@ I bind it to =gs= in my init.el, but this is not a part
of the mode.
#+end_src
Vim's default =gs= is (sit-for 1) but evil-mode doesn't implement it.
-Note that Vim's behavior is often available so e.g. =~= will work on the
(char-after) and move forward.
-It might feel a bit less natural in this mode but it still works.
+Note that Vim's behavior is still available so e.g. =~= (evil-invert-char)
will work on the (char-after) and move forward.
*** Touching delimiters
If you have touching delimiters like "(...)(...)" and your cursor is between
them, then =%= will jump back to the first "(".
-In this mode there is no way to toggle back and forth between the second set
of delimiters when the two sets are touching.
+In this mode there is no evil-mode way to toggle back and forth between the
second set of delimiters when the two sets are touching.
*** Visual block
-Last the mode does nothing to =C-v= which is still working with a cursor on
character model.
-In practice =C-v= is still usable and useful but it will have a few bugs tied
to the end of line position.
+Last the mode does nothing to =C-v= which is still working with a cursor on
top of character model.
+In practice =C-v= is still usable and useful but it does have a few bugs tied
to the end of line position.
-Note that the evil team has done a great job on (evil-visual-block).
-Vanilla Emacs' (rectangle-mark-mode) =C-x <spc>= does not color the region the
same way.
+Note that the evil team have done a great job on (evil-visual-block).
Updating =C-v= to be consistent with this mode's cursor model is a challenge.
** Raison d'ĂȘtre speculation
I think the main advantage of the mode is the line nugget mindset.
-If you don't use your editor every day I think this is easier to pick up and
more similar to other editing experiences.
+If you don't use your editor every day I think the logic is easier to pick up
and more similar to other editing experiences.
That is the personal preference I have.
The reason for the mode might also be as an introduction to Vim's modal system.