zed-industries / zed

Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
https://zed.dev
Other
50.57k stars 3.13k forks source link

Implement Leap Key Navigation #4934

Open peter-wasilko opened 1 year ago

peter-wasilko commented 1 year ago

Check for existing issues

Describe the feature

Jef Raskin's design for the Canon Cat employed a quasi-mode for rapid navigation as illustrated in this YouTube Video.

This feature has also been requested in the helloSystem project repro.

Also, BitSavers has a copy of the Cat's Technical Documentation that may be of interest on this topic among others.

Finally, there was an attempted reimplementation in Python by Aza Raskin, Jef's son.

If applicable, add mockups / screenshots to help present your vision of the feature

No response

clo4 commented 1 year ago

This is an interesting idea. I don't see how it's different from using cmd-f though (or //? in vim mode) -- could you explain further what makes this different from just searching?

Seems similar to zed-industries/zed#4930 and zed-industries/zed#5289 (it's a different execution of the same concept)

clord commented 7 months ago

Plus one for this.

I prefer leap over hop and easymotion personally, as it is very natural; using the word prefix itself instead of random characters. With it, you trigger the command somehow and then press the two letters of the word you want the cursor to go, and all locations that match on screen get an indication. since you're looking at where you want to go, you press the key that marks the location, and your cursor jumps. Since only places with the two characters appear, the visual clutter is minimal.

Please see the readme at https://github.com/ggandor/leap.nvim

Other editors have this idea too, and bring new concepts to it. For instance, helix recently added goto_word mode.

This category of plugin speaks to the need for quickly moving the cursor visually without touching the mouse or changing modes.

iusedtodraw commented 6 months ago

Currently, leap.nvim and oil.nvim are the two things I miss the most, in that order.

I like / for being stateful (cycling through matches) and global, but when you just need to jump to a certain place in a viewport (which I believe to be the most common motion), it seems like nothing does it better than leap.nvim at the moment.

willtalmadge commented 3 months ago

This is an interesting idea. I don't see how it's different from using cmd-f though (or //? in vim mode) -- could you explain further what makes this different from just searching?

Seems similar to #4930 and #5289 (it's a different execution of the same concept)

You can think of it like a poor-man's eye tracker because it serves the same functional purpose. If you are looking at a location in a vim buffer, you can get the cursor to that location by pressing no more than 2-3 keys (not including the start key). So you look at something, press 's', start typing what you are looking at, if there's ambiguity it'll temporarily put a "flag" character in the buffer you should type to disambiguate which site you are looking at. It feels like your editor is reading your mind. Completely replaces the need for touching the trackpad which is helpful for me because trackpad clicking gives me carpal tunnel.

ninjarogue commented 2 months ago

Here's a quick demo:

https://github.com/user-attachments/assets/ca821e97-3460-4923-925f-08cb6f5d341a

I'm pressing 's' to activate leap.

djmango commented 1 week ago

Is this possible to add via an extension? Would prefer core ideally but I'd be happy to look into writing a plugin

clord commented 1 week ago

This is one of those things that Zed could really shine at, since it is not limited to the character grid like a terminal editor. Target annotations could avoid replacing characters at the target.

Another noteworthy thing for this feature is that it works cross-tab. In vim, I set up S to jump to another split, and then plopping the cursor right where it's needed.