Why does g+ sometimes skip a leaf of the undo tree?

General Tech Learning Aids/Tools 2 years ago

0 1 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Learning Aids/Tools related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (1)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I'm trying to understand how to move in the undo tree with the following default mappings:
ug- and g+

Here's my understanding of things, which is probably wrong or incomplete. Each time we make a new edit, a new leaf is created in the undo tree. The more we make edits, the more leafs are added along a branch.

To move along the branch, we can use u to go back to the original version of the buffer, and to go forward to the newest version.

This can be confirmed with the simple following test:

  • create an empty buffer,
  • insert the number 1,
  • hit  to increment it to 2, again to 3 and again to 4

Using u and , we can go back to each state of the buffer: empty, 123 and 4.

If at one point, we go backward and make a new edit from a past leaf, we create a new branch. The leafs which are not between the root of the tree (the original buffer) and the beginning of the new branch (the last edit we just made) can't be accessed with u and .
Going back to the example, this can be confirmed:

  • from the buffer's version 4, hit u to go back to 3
  • hit r5 to replace 3 with 5
  • hit u to undo the last edit

The last u doesn't bring us back to 4 but to 3.
We can't go back anymore to 4 with u and  because they only move along the shortest path between the root of the tree and the most recent version of the buffer which we've visited.
4 is not on the shortest path between the original empty buffer and 5, because 5 was created from 3.

To go back to any leaf of the undo tree, we can use g- and g+. Contrary to u and , they move along a time axis on which every leaf is placed in the order it was created.

To confirm this:

  • undo with u up to the original empty buffer
  • hit g+ 5 times to reach 1234 and 5
  • hit g- 5 times to get back to 4321 and the empty buffer

However, there's one case I don't understand. If from 5, we hit u to get back to 3, then g+, we get 5. But on the time axis, the nearest leaf from 3 is not 5, it's 4.

So why does Vim bring us to 5 instead of 4?

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.

tuteehub community

Join Our Community Today

Ready to take your education and career to the next level? Register today and join our growing community of learners and professionals.

tuteehub community