Code Monkey home page Code Monkey logo

Comments (8)

bryphe avatar bryphe commented on July 20, 2024 6

Thanks all for the great feedback / discussion! I feel bad in a way that I didn't have the repo in a better spot with more details on the vision of the project :)

My long-term vision would be to have a modal editor for the 21st century. I've gotten really hooked on Vim in the past year - in my opinion, it is the fastest way to author text. For a long time, I used visual studio with C# and I really enjoyed the intellisense and language features, but I tried coding on my laptop on a long flight, and realized how hard it was to deal with the trackpad... and realized there had to be a better way!

I then got into Vim, using gvim on windows, but missed some of the language features. So then I tried Atom, and it's actually a very beautiful editor, with a mature VIM binding. However, as was pointed out, it's slow. Like, so slow that I assumed Electron wasn't really a viable option for a while. I would love to just use Atom with Neovim, but when I looked at the performance, I found they weren't just one-off issues but core architectural issues. If you're interested in the performance work they are doing, check out these issues:

Unfortunately, they've been open for a year or more, and there are a few other issues that are non-starters for me.

I then tried out https://github.com/microsoft/vscode, and VSCode is actually a really great editor - it's much faster than Atom in most areas, and I think it proves to people that an Electron-based app can be a viable editor. I've used the VIM plugin there: https://github.com/VSCodeVim/Vim and the author there has done fantastic work and it's very mature. I'm a big fan of both VSCode and VSCodeVim plugin, and I tried really, really hard to make that my primary editor. However, for VSCode, the lack of extensibility of the core editor was a problem for me, and no matter what vim emulation you do, there are always cases where something goes differently than you expect, and to me thats like nails on a chalkboard.

I've also been really inspired by some talks like this:
(A Whole New World - A new text editor) https://www.destroyallsoftware.com/talks/a-whole-new-world
(React w/ Live Reloading) https://www.youtube.com/watch?v=xsSnOQynTHs

And then projects like this:
http://lighttable.com/

I would really like to incorporate some of these concepts into an editor. Being able to see your code live as you edit is such a powerful concept, and it makes writing code a whole different ballgame.

At the end of the day, whether I was in Visual Studio, Atom, VSCode, I felt like I had to make a compromise in some direction, so that's sort of how this project came about - I just wanted to build an editor that fit my workflow and let me try out some of these ideas, without compromising. Neovim made that possible by allowing an arbitrary front-end and letting me preserve everything I enjoy about VIM.

I've done a lot of rambling... but to give thoughts on the questions more directly:

  1. Plugins - I agree with both points above - to me, I use a relatively small set of plugins, but these are very personal. I would really like to make it easy to transition to Oni from Vim/Neovim if a developer feels it is the right fit for them - I think if #13, #20, and #33 can be implemented reasonably, then that would go a long way in bridging the gap for the transition. I think if we can also add a variable like g:oni or something, that could help people too.

  2. Lua - I'm actually not too familiar with how Lua is used in Vim - I've never used a Vim distro that was built with Lua support. I'm more familiar with it in the context of a scripting engine for games ;) Let me know if there are some concerns here, I imagine there are solutions - the worst case is Neovim always supports writing to stdin/stdout, so you can always implement a protocol over async.

  3. Re-implementation - I think we covered the Atom issues above, but I think even without Atom, we still have a ton of opportunity for reuse. The React community has an incredible set of controls and libraries (thanks @jordwalke !!) to leverage, and Microsoft has done a great job making their plugin infrastructure open - https://github.com/Microsoft/language-server-protocol - and the node community has such a rich set of NPM modules that can be used, so there's a ton of opportunity to reuse some existing controls. I'd like to reuse existing ones where we can, and then if we need to build new ones, eventually refactor and make available to the community.

Oh and by the way, @bert88sta , not stupid questions at all - thanks a lot for asking them!

from oni.

JakubJecminek avatar JakubJecminek commented on July 20, 2024 1

Are you looking for any help on the project? Oni seems to me like great project and I would like to help in my spare time. Do you have some backlog of features you need to implement?

from oni.

Bretley avatar Bretley commented on July 20, 2024 1

@JakubJecminek the issues are mostly features and or bug fixes, any of those would be great
:)

from oni.

keforbes avatar keforbes commented on July 20, 2024

I have a similar concern (which I didn't think justified its own issue) so I'll just add on to @bert88sta's question of where you see Oni going in the future.

Given that this is an Electron app, I wonder how much time you'll spend trying to re-implement Atom features when you could just create an integration with Atom. There was a similar project which was trying to integrate Neovim with Atom but it looks like it has been abandoned. Oni is further along than that Atom integration but Atom still has a lot of the features that Oni is trying to implement. If you're trying to do something with Oni that Atom doesn't do then that's awesome but fuzzy finder, mini-map, code completion, error highlighting, and quick info popups are all implemented in Atom (or available via Atom plugins). I'd hate for you to duplicate effort if it isn't needed.

from oni.

jordwalke avatar jordwalke commented on July 20, 2024

I do not currently share the same concern. I'll explain why. There are many great editors out there with great plugin systems (JS is very popular/strategic choice for plugin language). Most of them lack great vim keybindings (besides vmp, of course). Even if Oni was only using NeoVim just to create great vim-faithful key bindings (and undo/redo, cursor position, visual block mode - creating that excellent, authentic vim feel) it would be worth it even if zero Vim plugins were supported. Still, the better support there is for Vim plugins, the better, and I've proposed some interesting ways to make sure that Oni can integrate very well with other Vim based configuration. I just thought I'd express that although I feel this tight integration is great, it's doesn't seem as important when the alternative is using another IDE entirely with vim bindings that don't even feel authentic.

As far as Atom is concerned, I have to say I appreciate the instant startup time of Oni and would not see much point in integrating into Atom unless somehow you found a way to make Atom's startup time/perf as fast as raw vim.

from oni.

bryphe avatar bryphe commented on July 20, 2024

Are you looking for any help on the project?

@JakubJecminek Definitely! I think this is an ambitious vision and to build something meaningful for the community I'll need a lot of help. I'll be porting over some of the items I had in my TODO backlog as bugs / features in the issue tracker here, it would be awesome to have your help in the ones that interest you. And if there are ideas you have that aren't tracked, feel free to log them here so we can discuss.

from oni.

bryphe avatar bryphe commented on July 20, 2024

I'll close this out for now, as the project has matured significantly since this initial discussion. Great to have this context though, and feel free to log an issue if there are still aspects of the direction that are unclear!

from oni.

trusktr avatar trusktr commented on July 20, 2024

mini-map

This would be too awesome! Maybe Oni can open the current window's buffer in another window and render to a shrunk down canvas on the side of the Oni window?

from oni.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.