VIM-like modes/keybindings

Is your feature request related to a problem? Please describe.

I prefer software and services which have keybindings similar to the [VIM ](Vim (text editor) - Wikipedia) text editor. In it’s simplest form it focuses “hotkeys” to the home row, minimizing the need for the arrow keys and the mouse. This is accomplished by having different [modes](Vim (text editor) - Wikipedia).

Example: In insert mode you use all key as input keys for text. By pressing escape you leave insert and enter normal. Here all the keys instead perform different functions/actions, and not input. You can go back to insert by pressing i.

Describe the solution you’d like

Two modes. A command mode, where I interact with anytype using single key presses. A input mode, where key presses results in actual text.

Describe alternatives you’ve considered

Two modes is the dream. However, since this probably is a quite a lot of work for a small userbase I suggest something more lightweight and hopefully realistic. It essentially comes down to additional hotkeys, rather than having different modes.

I’ll try to explain this with a series of action.

    1. I’m in a block typing text. The arrows moves the cursor.
    1. I press escape, the cursor “leaves” the block. Arrows now move the page up/down
    1. j and k also move the page up/down (similar to VIM)

In general, HJKL can be used in place of arrow keys. E.g. when navigating the / command menu.

Additional context

Example implementation. The search engine DuckDuckGo has the following key bindings for navigation (see [move around](Keyboard Shortcuts | DuckDuckGo Help Pages)):

  • ↓ or j — next search result
  • ↑ or k — previous search result

Additional additional context

Thanks for the alpha user presentation on zoom today :slight_smile:

15 Likes

+1 for the vim keybindings, I love to use it in obsidian, would like to see it in Anytype too.

4 Likes

I feel like this has been talked about before and is a highly requested feature, maybe in the Telegram chat group. Anyway, I can’t find anything related to this in the forum, I 100% agree with the concept of having vim keybindings, though the details could of course change.

1 Like

Different but related, my proposal for “modes” for editing vs. block manipulation:

https://community.anytype.io/t/-/1072

I am not a Vim user nor familiar with its specifics, but I do like the idea of modes, whether they’re “true” modes (i.e. you are in a mode until you switch out of it, then you are in that mode until you switch again) or more “dynamic modes” like I describe in my post above, e.g. “hold down a modifier key temporarily shift to a mode”.

I would like to add that whatever key binding it is to go into that mode should be hard to accidentally get into-- maybe a 3-key combination with alt? I can see a very frustrating situation for an end-user with no experience with key bindings getting stuck in the wrong mode.

1 Like

@laurara This is one reason why I dislike Vim’s approach and prefer a “dynamic/temporary mode” as described in the post I linked to above.

I would like to see a VIM mode as well. Obisidan has it and it is the reason a lot of programmers use it as their PKM. I take notes that consists of multiple pages and I need to be able to edit them in an efficient manner. VIM mode would help a lot. Anytype’s current keybindings are problematic and I need to use mouse quite often. (Ex. Writing something inside a toggle block in page that has more than one column, creating a toggle block that has another toggle block with a picture inside above it etc.)

1 Like

Thanks for the feedback @OKS

I’ve shared it with the Team!

1 Like

Are there any updates on this, as Anytype is an amazing tool; but the lack of VIM keybindings is a huge dealbreaker for me. Alongside this fact, since this is an electron based app; there are no accessibility API’s which are exposed to the user which could allow for a user to program their own VIM keybindings through an external source.

On MacOS Projects like SketchyVIM allow for the usage of the AXManualAccessibility allows for a user to leverage universal Vim Keybindings by working on text fields as accessibility buffers. This will allow the team to not have to spend as much time working on the keybindings (if busy), and by enabling the AXManualAccessibility flag in the electron code, it will allow users to create their own keybindings in a simple way.

Programs such as iAWriter which are minimal and don’t contain any built-in keybindings have exposed this API, and for most people who use VIM is a necessity.

While I like the general idea, I foresee one problem with 2nd action.

With selection prompting language input, e.g. Cangjie or zhuyin for Chinese, escape is a commonly used button for deselect or escape the selection menu. It is likely to interrupt flow of text input with the constantly mistaken leave of blocks…

If it is possible for user to turn on and off the function (or re-assign the button), it should be fine… but it would be great to have a universally applicable approach.

P.S. This problem does not exist in Obsidian because there is no mode switching.

FYI Obsidian does have VIM keybindings (including normal/visual/input mode). It’s disabled by default.

1 Like

Using Vim more would always be simply an option to users who are interested. And by exposing these variables to developers; when they are programming their external solutions they (can if needed) remap keys to perform these functions.

I am really surprised this has not more support.

A modal editor (like VIM) takes a bit longer to learn but it is very comfortable and efficient to use.

I would not say that it is an essential feature but I will definitely miss it. A LOT.

There could be a feature, like in many editors, to toggle VIM-mode or not. It would be off by default, and could be switched on by those who would want to.

1 Like

I would love to see VIM implemented as well. Namely, a fully fledged keymapping interface with a toggle to enable ‘VIM Modes’ for us who know how to :q!. I would love to see an option on the keybindings page to allow for modes with a default ‘VIM’ preset loaded that we can start to customize. But Modes should be customizable as well. We are power users who love our custom workflows. I want to see keybindings for navigating to and from different objects as well.

This would be my preferred integration. No mo mousing around :smirk_cat: Full keybort access.

I’ll throw my hat in the ring here. I love using vim bindings for text editing. It would be spectacular to get some of the more advanced vim editing modes like visual mode. I would settle for just the basics. Most other note-taking/text/IDE software have a pretty basic implementation of vim mode. I wonder if this could be achieved just by being able to assign custom keybinding, at least for a basic vim mode integration.