Show HN: McWig – A modal, Vim-like text editor written in Go

github.com

151 points by andrew_bbb 4 days ago

Hey! Check out my "toy" text editor which I use as my daily driver.

Features LSP autocomplete, goto definition, hover info

Tree-sitter support

Color themes (borrowed from the Helix text editor)

Lots of bugs

Macro support

Something like Emacs org-mode: Open test.txt, place the cursor at line 15, and press "Ctrl-C Ctrl-C".

This project was written as a "speed run" — not for speed in terms of time, but rather as an exercise to explore the text editor problem space without overthinking or planning ahead. It’s a quick and "dirty" implementation, so to speak.

https://github.com/firstrow/mcwig

paddy_m 3 days ago

That's a lot of code for a toy project, impressive commitment!

How does the VIM family generally handle extensibility?

Do you have any unique takes there?

I use Emacs, and I get how emacs does it (smallish runtime for text display and lisp interpreter, everything else in lisp).

  • andrew_bbb 2 days ago

    Hey Paddy. Vim uses horrible vimscrip, neovim - cool lua. I have two idea for plugins: - 1. Rich events system on backend side. e.g. write golang code for plugins, recomplire editor. done. pros: good performance, autocomplete for plugins out-of-the-box. golang. cons: feedback loop is lonfer. recomplier, restart, repeat. - 2. Use lua. pros: fast development cycle. cons: harder to implement. two languages, communication overhead.

    I also use Emacs, btw.

    • icar 11 hours ago

      You could consider WASM.

  • fgonzag 2 days ago

    Traditionally (classic vim), horribly well. Fully extensible, but Vimscript is quirky to say the least.

    Recently (neovim), delightfully. It just uses Lua and exposes APIs for absolutely everything.

xlii 3 days ago

When it comes to Go editors (IMO Go is perfect language for such editors) I also need to mention https://anvil-editor.net

It's ACME inspired, open source (although I don't think it's published on GitHub, one needs to download), and it's actually quite nice to work with due to its composability).

Takes some time to use, but it's really fun to use for stuff like ad-hoc documentation, completion etc. Oh, and it also has REST API for interaction with external tools so you can Go (pun intended) crazy on it.

scuff3d 3 days ago

I love bugs being a feature lol.

Awesome project man. I'll have to spend some time exploring the code base when I have time.

  • andrew_bbb 2 days ago

    Humor must be! Boring otherwise!

  • iamkoch 3 days ago

    That got me chuckling too

GuiShou 2 days ago

Love the honesty about "lots of bugs" - refreshing to see!

The fact that you're daily driving this speaks volumes about its usability despite being a "toy" project. A few questions: - How's the learning curve for someone coming from Vim/Neovim? - The org-mode-like feature sounds intriguing - can you elaborate on what Ctrl-C Ctrl-C does? - Any plans to add plugin support, or are you keeping it intentionally minimal?

The Helix color theme borrowing is smart - no need to reinvent good design choices.

  • andrew_bbb 2 days ago

    Ctrl-c will spawn process defined in header and will send all subsequent commands to it. E.g; spawn psql, run sql queries from editor.

    For now I have no plans for plugins. Need to finish "base" first and good. And yes, intention is to keep it minimal.

imiric 3 days ago

Looks great. Awesome job!

I know you haven't planned ahead, but have you thought about extensibility? One of the main benefit of Vim and Emacs is that the user can customize it exactly to fit their needs, and the large ecosystem that exists around that. I suppose it would be smart for any new editor nowadays to be able to leverage existing plugins from other ecosystems, rather than starting from scratch.

  • andrew_bbb 2 days ago

    I'm not planning to work on plugins on the near future. But yes, I have some ideas. mainly: golang compliled plugins or lua. I'm leaning more to go complied plugins.

nickandbro 3 days ago

Like the color schemes! I myself am working on an app called https://vimgolf.ai to make it easier to learn how to use vim. Might copy what you did with copying the color schemes from the helix code editor.

  • andrew_bbb 2 days ago

    Hey fellow vim enthusiast! I wish you all the best with vimgolf.ai

hit8run 3 days ago

Love it! I'm a big fan of code terminal ui code editors. Currently for that purpose Helix is my daily driver. Will try out yours shortly and don't let anyone discourage you! Keep going. Adaption will follow.

  • andrew_bbb 2 days ago

    Hey hit8run, appreciate your feedback. I was also running Helix for a couple of months. great editor. performance is phenomenal.

90s_dev 4 days ago

This is incredible! It looks beautiful, with a perfect type of minimalism, and supports modern features out of the box. Very good job! If I used terminal editors anymore, I would certainly use this!

  • andrew_bbb 4 days ago

    I appreciate your feedback!

    • sdegutis 3 days ago

      No problem. Glad it made it to the front page quickly like I said it would. Now I don't look so dumb :D

lsllc 3 days ago

So interesting that you use diffs for undo/redo! Ingenious!

  • andrew_bbb 2 days ago

    That was most "dumb" and simple yet fast approach to get it done. Other ways of implementing it are more time consuming. I've saved a lot of time on it. Like "one day" and it was done.

tempfile 3 days ago

Looks lovely. Where does it deviate from vim? Evidently it is modal. What features make it more effective than vim is?

  • andrew_bbb 2 days ago

    it is not more effective than vim nor it will ever be. it "just" a text editor with no intention to compete with vim or any other great editor.

wyclif 3 days ago

Just name it Wig. It's cleaner. <SeanParker.gif>

  • andrew_bbb 2 days ago

    Hey wyclif! I'll take your idea! amazing! really really like it! wig let it be!