Ad: An Adaptable Text Editor
github.com
github.com
https://anvil-editor.net/ is more directly inspired by and similar to Acme (but makes no attempt to borrow from Vim).
https://github.com/martanne/vis is a minimalist editor that stays close to Vim but adds Sam-style regular extensions and multi-cursor editing (but not Acme-style "execute anything on screen"). For example, you can select all instances of a regex and edit them all at once afterwards interactively.
Is the ability of Vis to select all instances of a regex and edit them all at once afterwards interactively (see e.g. https://asciinema.org/a/41361) Vis's own idea, or was it part of Acme? Is it part of Ad?
Wow, I didn't think there is still open source software around that isn't hosted on GitHub or another code hosting platform. And the page also makes it very hard to tell if the project is still active, the only date I could find was in the license (2019). I actually had to download the latest version and look inside the archive to see that it's from November 2024...
https://crates.io/crates/scribe
Good luck with the project! Building a text editor to scratch your own itch is fun.
One thing that I would love to see is vim like bindings for navigating a semantic representation - navigating a tree sitter representation instead of words and symbols.
Plus building vi-like editors is just a fun exercise a lot of programmers undertake, hence why there are so many. People have to try things to know what is better.
E.g.: daf = "delete around function", vic = "visual inside class", etc.
- Kakoune
- Helix
- Vis
- Ki
- Ad
- ...
I tried "ki vimlike." In retrospect, "ki editor" would have made more sense.
It’s quite a young editor but is conceptually pretty neat! It works on syntax trees as defined by tree sitter, and the tutorial on their site shows off how powerful that is pretty nicely.
I also like how it gets by with pretty much just buffers and readline for everything. I’m a bit more wary of all config happening by changing code and recompiling, though.
Definitely one I’m watching, though it’s far from being able to tempt me away from Helix at this stage.
nmap <C-W>+ <C-W>+<SID>ws
nnoremap <script> <SID>ws+ 10<C-W>+<SID>ws
nmap <SID>ws <nop>Emacs reifies its LISP underpinnings by modelling edit commands as an AST[0]. "Top down" as it were. This optimizes for command categorization.
Vi/vim/derivatives model editing by "flattening" the editing command tree such that the vast majority are no more than two or three keystrokes (excluding repeat count prefixes). This optimizes for uniform command distribution.
Both eschew requiring a mouse and/or a GUI, which vastly increase their applicability.
As to which is superior, that is the subject of thousands of "editor wars" threads in one form or another.
My stance is to pick whichever best suits how you like to think when solving problems.
This is a prime example of what is, it seems to me, one of the absolutely core misunderstandings of the wider Unix world.
GUI does not mean, imply, or require a mouse. The original Mac and Lisa were mouse-centric, yes, but folks, that was 40 years ago now and the world has moved on.
You can use a modern Mac entirely without a pointing device, via Voiceover, which is built in to all Macs, iPhones, iPads, etc.
Windows has been amenable to being 100% keyboard driven since Windows 1.0 in 1985 and I have been using Windows primarily by keyboard controls since 1988.
This is the standard method of computer interaction for millions of blind computer users around the world since the 1980s.
What's more, the Windows keyboard UI strongly influenced IBM CUA, which in turn was informed by the mid-1980s Apple Human Interface Guidelines, and that influenced OS/2, DOS from 1990 or so onwards (so MS/PC DOS 4 and later), and that influenced Xfce, KDE, GNOME 1/2, and most other xNix GUIs.
It is only the shell oriented xNix world that has refused to adapt.
Console-mode shell-only Linux text editors such as eFTE, SETedit, and Tilde all have the third-of-a-century-old standard UI and can be used 100% with the keyboard but also have menus and dialog boxes.
The standard design of basically all 21st century GUIs (except for the handful that are intentionally different – GNOME, Pantheon, Unity) does not need graphics. It does not need a mouse. It can be, and still today is, sometimes implemented entirely in text mode, it works on dumb text terminals, and it was universal in 1990s DOS, OS/2 and other native x86 OSes.
The result of the refusal of the xNix world to even notice this is happening has absolutely crippled the field of editor design on xNix.
In all other fields of software, text editors moved on from the awful and terribly dated design of Vi and Emacs by the late 1970s. See this interview with Larry Tesler, who invented cut/copy/paste as a computer UI.
https://worrydream.com/refs/Tesler_2012_-_A_Personal_History...
This means that there are something like a million times more users out there happily editing text every day with editors with better UI than the absolute top-rated shell editors on any xNix.
MS Word and all of Office, and all of its rivals. IE, Edge, Chrome, Firefox, and all other browsers, GUI email clients including on Linux and all the BSDs, etc.
I have written about this, in case you're unfamiliar with CUA:
https://www.theregister.com/2024/01/24/rise_and_fall_of_cua/
I think there are a lot bigger problems to solve in the xNix environment than getting people to stop pressing escape to enter normal mode.
(the argument for Emacs makes less sense since it has customizations available to be as "modern" as you want. You may criticize it's byzantine configuration process, but that's a different topic. It's also funny how Apple, the poster child for elegance in UIs has Emacs keybindings by default everywhere in macOS, even the concepts of "yanking" and "killing". In hindsight though, it makes perfect sense)
I am absolutely not saying that there is any difference in utility whatsoever. I have watched skilled exponents of Vim and Emacs perform wizardry, and I've also seen an adept of Jedit do things with plain English text that I don't know how to do in any editor.
This is absolutely not about utility or capabilities.
It's about UI.
I am aware of efforts to bring a standard modern (as in, 1990s) UI to both editors.
For Emacs there is ErgoEmacs -- https://ergoemacs.github.io/ -- which is amazing and makes it slightly usable even for me, steeped in CUA for over a third of a century.
For Vim I know of Cream -- https://cream.sourceforge.net/ -- but it seems unmaintained for a long time and when I tried it I couldn't get it working.
What I am saying is two other, quite different things:
1. Using the Linux shell is needlessly hard and complicated, because of its adamant refusal to adopt the modernised UIs of other text-mode OSes from 30+ years ago. These could be bringing the shell into harmony with the GUI, making the experience better, and it would be trivially easy to set things up so that experienced users with their own ways of doing things were not inconvenienced at all.
2. As a result of this refusal, or even of this blank ignorance and lack of curiosity in how other OSes and other platforms modernised text-mode apps, the dominant tools in Linux and other FOSS xNixes have no standadisation. Even when there are TUIs driven by ncurses or whatever, they're all different and all inconsistent. There's no need for it. It's wasting everyone's time.
In other words, the tools don't need to be different from one another and they don't need to look and work so differently from in GUI desktops.
Makes no difference. I lived for a decade in Czechia, where they use QWERTZ. CUA works absolutely the same whatever your localisation.
My pet theory, we can thank LSP for that, as it removed the major hurdle for any new editor project: the complexity of supporting modern programming languages and practices. Being able to offload most of that complexity to a language server (and most of the rest to tree-sitter) just about makes a new editor a viable side project.
As for motivation... I wonder how many of the new editors are a "let's rewrite it in Rust" thing?
None? I mean, Helix and Kakoune are written in Rust, but they are not rewrites, they have very different goals than e.g. neovim.
They explore different concepts, workflows and ideas, and the choice of Rust as a language merely stems from the authors finding Rust to be a pleasant and appropriate language to explore their ideas
I'm not talking about hjkl, but rather y for yank, p for put, d for delete, u for undo... where today every other software adopts a different vocabulary, namely x for cut, c for copy, v for paste, z for undo, etc.
By default you just get what your terminal does.
And then as the link says:
- <Esc> moves to the left [...] but if you do i_Ctrl-O or i_Ctrl-\_Ctrl-O [...] it moves to the right!!
- An empty line still allows normal mode to have a cursor, but since there are zero characters this cursor is kind of “fake”.
What do you mean by empty lines? Does your vim somehow have lines in the buffer that aren't in the file?
I grew up mostly with Windows and CUA, and I still became a big fan of vim.
Also, for dvorak in particular, it reminds me of those RC car controllers that split up the horizontal and vertical movement between your hands. It's the same with dvorak. H is left of L, both right hand, that's your left/right. J and K are right beside each other (and in same left to right order as qwerty), there's your down and up. Workman is a lot more nonsensical by comparison with all but h on right hand and j above k, but it doesn't bother me.
You fell victim to one of the classic blunders - the most
famous of which is "never get involved in a land war in
Asia" - but only slightly less well-known is this:
Sooner or later, wanting to write a program editor has ensnared many a skilled developer, only to find it to be a time vampire when considered anything more than an intellectual exercise.Good luck on your journey. :-)
0 - https://www.imdb.com/title/tt0093779/quotes/?ref_=tt_dyk_qu
I have written three different code editors over the course of my career, and the last of them I have been using every day for a long time. It is a good feeling, building tools which suit oneself perfectly!
Kinda like how art students copy master works and noob programmers recreate classic games (pong, space invaders, tetris, pacman, ...).
I love it when people share their rewrites, recreations.