When I first started programming, I was using IDEs such as Eclipse and Visual Studio. After a few years, I switched to Vim because I wanted something faster and lighter with less clutter in the UI. Vim is just about as clutter-free and fast to work with as an editor gets, so I've been quite happy with it. But I've started to miss features from other editors such as being able to jump to definitions, CommandT, autocompletions and lint warnings. I know many of these things can be achieved with plugins but Vim's plugin system is a mess and as soon as something requires a tiny bit of UI, the terminal is not very good for it.
So what about MacVim, GNOME-Vim, KVim, etc? These editors really only shove terminal-Vim inside an app window, and that doesn't solve any of the issues pointed out.
Ok, but what about the IDEs with a Vi-mode that can be turned on, like Komodo, Cloud9 or even Eclipse with any of its Vi plugins? These all have the kind of UI that made me switch to Vim in the first place, and the Vi-mode tends to be treated as a second class citizen.
Vi and Vim have a very different way of doing things. This is not only apparent their keybindings, but affects UI and other elements as well. I think that if you want to build an editor for Vi-users, you have to focus on the Vi of doing things, so you basically have to choose, do I want to make a Vi-like editor or a more standard one.
There's really only one editor that have made a real attempt at pushing Vi-like editors forward, and that's Vico. I like Vico very much, it has some awesome ideas and design, but its UI is focused on sidebars like traditional IDEs, and it hasn't done anything special with the command line which for me is the most important part of a Vi-like editor. It's also a Mac OS X application, and as the world is being taken over by smartphones, tablets and Chromebooks, the desktop platform is a dead end and the web is the way forward. In the future, I want to be able to pick up any iPad or Firefox Phone (FirePhone?) and start coding without entering a development mode or jailbreaking my device.
So I've started work on a new editor that I call HappyEdit. Basically it takes the soul of Vim: the commands, keybindings, the concept of different modes, the fast editing and clutter-free interface, and adds modern features common in other editors. All using modern web technologies.
I've been working full time on this project for two weeks now and I have to say that the result is mighty pleasing. The alpha version I've got running feels very nice to use and has already replaced MacVim as my main editor. But I need more time to work on this, so I've started a fund raising campaign over at Indiegogo where you can support this project and get cool stuff in return.
Features already implemented:
- Vim like INSERT/COMMAND/NORMAL modes, keybindings and search.
- Beautiful command line with autocompletions for files and commands.
- Tabbed interface.
- Minimalistic window border design.
- Blazingly fast syntax highlighting for 40+ languages.
- CommandT-like way of opening files.
- A remote mode so that you can work on files that are on another computer.
Upcoming features:
- A better way of searching multiple files, replacing vimgrep.
- A settings panel exposing options that are hard to find in Vim.
- Window splits.
- Ability to drag tabs between windows.
- Jump to definition & symbol navigation.
- Plugin system.
Open Source, Chrome Web Store and the Mozilla Marketplace
In order to get a separate app window, desktop icon, file system access, etc, HappyEdit uses upcoming APIs from Chrome and Mozilla. Even though I plan on selling HappyEdit through these channels, the source code for HappyEdit is 100 % open source and can be found at GitHub.
HappyEdit is based on the Ace editor being worked on by Cloud9 with roots from Mozilla's Bespin project, and I push as much work as possible upstream to Ace.
The future of this project
With v1 of HappyEdit, I aim for a stable release that any Vim user will feel comfortable picking up and start using. I aim this release for when Mozilla Marketplace or the Chrome Web Store launches and finalizes their APIs.
After v1, my plan is to start on the plugin system. But making a great plugin system is not easy to pull of: it should be flexible enough so that many different ideas can be implemented, at the same time it should place restrictions so that plugins don't conflict with eachother and developers have a clearly laid out path to follow. There is quite a bit of research, thinking and discussion that needs to take place before work on this begins.
Links:
Official home page
Indiegogo campaign
GitHub
Flattr


