Vim support for the new editor (Codemirror 6) - Neovim, libvim, or something else

This has probably been discussed a bunch of times before, but Vim support is far from ideal.

There’s a plugin for making a custom vimrc, which helps a bit, but text editing is just not the same without a regular Vim config.

Now, I know this would probably be a lot of work to implement, and I wouldn’t bring this up if I hadn’t seen it done well somewhere else, but Onivim 2 (an electron-ish app — it uses something else, but the point is that it uses web technologies) uses a Vim C library under the hood and it’s freaking fantastic!

It feels just like using Vim, for the most part. All the basic plugins, like vim-surround, for example, work great. So I thought I’d bring this up to see if this would be a feasible thing to do in Obsidian.

What really got my attention, as I’ve been following Onivim’s progress for quite a while, is that I think that app is developed by one person, so that got me wondering if this wouldn’t be easier to implement than I initially thought…

It would be great if somebody picks this up and implements a bridge between libvim or neovim and CodeMirror 6.

3 Likes

Any clue what’s the timeline? When is CM6 expected to take over CM5 in desktop Obsidian?

There won’t be a take over, they’ll coexist at least for a while.

1 Like

This sounds to me like a long-term project that has many uses, but Obsidian is not a major one of them anytime soon (I’m assuming here that Vim mode on mobile is a niche).
But since there will be a switch eventually (CM6 is the future of CM, that’s for sure), it certainly needs long-term attention. I might be able to do that but only in a few months when other big free-time projects get cleared up.

Bounty for vim mode in codemirror 6

2 Likes

I made this meme in hopes to capture the mixed feelings :joy:

I really hope there’s a way in which the new “Live Preview” WYSIWYG editor will somehow support vim-mode.

I’m not a programmer unfortunately so I don’t know the extent of what it would take for that to happen.


What I’d love to know is what do others think is the best way to make this happen.

Is a donation our only hope? and if so is it a good idea to encourage as many people interested to donate?


Mixed feelings

I personally have been looking forward to the new Obsidian Live Preview editor for so long. I’ve been waiting to release educational content for Obsidian with high hopes on this editor.

The importance of Vim in Obsidian

I also believe that learning vim can benefits all types of writers, to write efficiently and in a much more fun way.

Teaching Vim in Obsidian (project now on standby)

I’ve been working for months on an online course to teach people how to use Vim in Obsidian.

I’ve been waiting for the new editor to release this course (of course I now have to wait for a solution :disappointed_relieved:)

The new “Live Preview Editor”

The new live editor is the future of Obsidian.

Eventhough I highly recommend to learn Vim in Obisidian, using the old editor is a bad idea, when the much superior live preview editor is exists. So I personally don’t think sticking to the old editor is the best way forward.


Finding solutions

I totally understand this goes beyond the control of the Obsidian devs. If anything I’m super grateful for the new amazing “live preview” editor. but as you can image I have mixed feelings #happy-sad

I really hope that those of us who value Vim in Obsidian can find a way to make it happen in the new editor somehow.


If you guys think donating to the bountysource is the best way forward, then let’s do it. If not I’d love to know what you guys think is the best way to bring Vim to the new Live Preview editor

Thanks :pray:

4 Likes

This CM6 vim mode experiment repo from the BountySource issue seems like the most up to date and promising effort thus far. Is there an up to date guide for integrating code for CM into Obsidian? I only just got started with Obsidian this last week, and don’t have the context of how CM fits in.

3 Likes

Following up on this, the recent changes in the repo (12 hours ago as of this post) have made great progress. I’m able to build and run a barebones CM6 editor with this new experimental Vim mode now :tada:

In my very light testing I haven’t had any issues with basic Vim usage. What is typically the next step for including CM changes into Obsidian when a new beta is being worked on, like v0.13 is now?

PS: I don’t know who to ping about this, so I’ll ping you given how Vim is blocking us from using Live Preview @santi :slight_smile:

6 Likes

thanks for keeping up with this post, Like you said I haven’t been able to move to Live Preview, due to the lack of vim.
I’m not sure if I understood what you said correctly, did you manage to test vim in Obsidian’s live preview with the updates done in that CM6 repo?

Really hope there’s a solution for us desperate vimers

3 Likes

licat is creating pulls against that cm6 vim mode experiment repo Add support for font family and font size on fat-cursor. by lishid · Pull Request #1 · nightwing/cm6-vim-mode-experiment · GitHub

1 Like

Oh we’ve already gotten vim mode working in the upcoming release - licat

Yes vim mode is coming to live preview - licat

1 Like

And here it is in 0.13.8! :tada:

Vim mode is now available for both Live Preview and Source mode.

vimLive

11 Likes

With this VIM Mode support, Is there a way to enable copy/paste from system clipboard to the note and vice versa?

Hi @shankarnakai I don’t know if that was fixed in Windows/Linux yet. (It always worked in MacOS.) If not, did you see this workaround? How to copy with vim mode? - #27 by santi

1 Like

@shankarnakai @rigmarole
In legacy editor, install and enable the vimrc plugin and put this in your .obsidian.vimrc file:

set clipboard=unnamed

…and restart obsidian.
The vimrc plugin doesn’t work yet with the new editor.

At least on Mac, Cmd-c/x/v work in insert mode with the new CM6 editor too.

3 Likes

Whoops noted, sorry!

Thanks @pmbauer @rigmarole , It worked for me.

1 Like

Didn’t see this - oops! Yes I was testing the experimental Vim repo, keeping up with their progress and testing in a stand alone CM6 editor. It got far enough to be included, which I was thrilled to see, and had nothing to do with my testing :slight_smile:

1 Like

This is awesome! Can I ask, is there a new method for defining ex commands with the new editor? I’m working on a plugin that listens for the codemirror event, then calls CodeMirror.Vim.defineEx(), but that doesn’t work with the new editor. The codemirror event doesn’t fire, and even if I try calling defineEx() in a long setTimeout, it doesn’t work. Strangely, it doesn’t throw an error. CodeMirror.Vim.defineEx does exist, but it doesn’t have any effect.