5 ms·
Show HN: McWig – A modal, Vim-like text editor written in Go
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 https://github.com/firstrow/mcwig
- 90s_dev 1y agoThis 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 1y agoI appreciate your feedback!
- sdegutis 1y agoNo problem. Glad it made it to the front page quickly like I said it would. Now I don't look so dumb :D
- tempfile 1y agoLooks lovely. Where does it deviate from vim? Evidently it is modal. What features make it more effective than vim is?
- andrew_bbb 1y agoit 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.
- tempfile 1y agoBut you compared it to vim in the project description. If you don't think it's better than vim in any respect, why did you write it? I am only looking for reasons I should try to use it. You seem to imply there are none?
- lsllc 1y agoSo interesting that you use diffs for undo/redo! Ingenious!
- andrew_bbb 1y agoThat 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.
- nickandbro 1y agoLike the color schemes! I myself am working on an app called https://vimgolf.ai 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 1y agoHey fellow vim enthusiast! I wish you all the best with vimgolf.ai
- nickandbro 1y agoThank you!
- paddy_m 1y agoThat'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).
- fgonzag 1y agoTraditionally (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.
- andrew_bbb 1y agoHey 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 1y agoYou could consider WASM.
- scuff3d 1y agoI love bugs being a feature lol. Awesome project man. I'll have to spend some time exploring the code base when I have time.
- iamkoch 1y agoThat got me chuckling too
- andrew_bbb 1y agoHumor must be! Boring otherwise!
- hit8run 1y agoLove 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 1y agoHey hit8run, appreciate your feedback. I was also running Helix for a couple of months. great editor. performance is phenomenal.
- xlii 1y agoWhen it comes to Go editors (IMO Go is perfect language for such editors) I also need to mention https://anvil-editor.net 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.
- lioeters 1y agoMicro is a very usable terminal-based editor written in Go. https://micro-editor.github.io/ https://micro-editor.github.io/
- imiric 1y agoLooks 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 1y agoI'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.
- wyclif 1y agoJust name it Wig. It's cleaner. <SeanParker.gif>
- andrew_bbb 1y agoHey wyclif! I'll take your idea! amazing! really really like it! wig let it be!
- curtisszmania 1y ago[dead]
- GuiShou 1y agoLove 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 1y agoCtrl-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.