-
Notifications
You must be signed in to change notification settings - Fork 299
Feature: Goals / Achievements #1135
Comments
I sent this to a friend of mine who know the basics of vim to use as an editor, (ie opening/saving/moving around with arrows/modes and a few "advanced" bits) but who doesn't especially know much past that except for if he looks it up or I go "Oooh just found X its really cool", and he thought it was a great idea! I think its very interesting as well! My first thoughts on it were as follows:
I think that for granularity, for the basics, it seems appropriate to me to have individual ones, just to point them out more clearly. |
Cool idea. The same UI elements could be repurposed for other things like tracking project source code TODO/FIXMEs etc. I actually think opt out is better. In fact, have to condidered activating vim “easy mode” by default, with immediate “Upsells” to modal editing? No power vim user would mind adding one line to their Oni config to begin unlocking achievements. |
If we could do it, I actually like this idea of recommending the more advanced way of doing something rather than simply counting how many times a feature has been used. While I like reinforcing the muscle memory by using a feature multiple times, that won't help me discover new features to become more efficient at my task. I guess I'm just thinking that not every feature is applicable to all users. For example, maybe I use vim to traverse large files but I don't write code. I probably don't care to learn about the code-completion features. If I could learn the features that are important to me I would be more efficient at my job and I wouldn't care what else Vim can do. I'm tempted to create a wiki page to see how many 'next step' recommendations we could come up with just because it'd be more collaborative than comments in an issue. Off the top of my head, here's what I'm thinking: Those are all basic key inputs we could match against. But I'm not sure how we'd recognize "you manually typed the word you just deleted somewhere else" to recommend copy/paste or "you're performing the same steps repeatedly" to recommend |
@bryphe Perhaps we can close this issue now that we have the achievement pane? Unless you want to track further progress on the feature. |
@badosu - thanks! Makes sense to close this out as the core feature is there - we can track changes as separate issues. |
(I like the format of @kkd705's feature proposal, so I borrowed it!) This is another idea for lowering the bar / discoverability, specifically for editing commands.
PROBLEM
It's challenging to get started with modal editing. I'm sure lots of people are familiar with this graph of Vim's learning curve:
A key issue is discoverability - how do I know what commands to use? How do I know what keypresses are relevant in a particular mode? How do I commit commands to memory?
One tip that I used while I was getting started with Vim was the sticky note method - I would put 3 new vim commands on a sticky note on my monitor. Once I was comfortable with those commands, I would switch to some newer ones. However, with the UI affordances that Oni has, I believe we can do better - and even gamify this.
SOLUTION
The idea is that, we have a set of commands available in each mode. Each command will have an associated goal. For example, use the 'word' motion 50x. Every time the motion is used, we'll bump up a graph in the 'learning' pane.
Once a learning goal is met, we'll pop up a quick UI, inspired by the achievement UI in consoles.
This would accomplish two things:
A key note is that these achievements are, in general, modal - that means that, as the user changes modes, we'll automatically show them the goals or achievements that are relevant to that mode.
EXAMPLE
The user could open the goals pane via a command-palette entry, like:

Which would then expose a sidebar with the list of goals/achievements:
As the user progresses, the bar would increase / show some animation to make it fun. Then, we could even show console-game-like achievements:
IMPLEMENTATION IDEAS
Creating the UI is relatively straightforward. The major challenges are:
h
/j
/k
/l
individually, but perhaps it would be better to group them into an achievement like "Arrow keys not needed"We could also have some fun hidden "achievements" like:
:q
X times :)OTHER CONSIDERATIONS
My prototype branch where I created the screenshot is: bryphe/proto/achievements
It'd be great to have feedback on whether or not this would be useful in general, ways to improve, and the sort of achievements / goals that would make sense.
Also, if anyone is interested in taking this on, feel free to run with it!
The text was updated successfully, but these errors were encountered: