Hacker News new | ask | show | jobs
by mario0b1 2763 days ago
>A modal, keyboard-driven interface inspired by Vim that makes navigating and editing text fast.

But what does it do different than vim? Having competition is good, but I don't see any "that's why you should use amp and not vim"-reason. Where is it?

4 comments

I thought it was pretty clear actually: it works out of the box with no configuration (batteries included).

> Amp is complete from the start.

As a long time vim user, the more advanced you get the more customized your vimrc and plugins become and you aren’t able to just walk up to vim somewhere else and be efficient (pairing with another vim user becomes impossible). Shared defaults are a powerful thing! Convention over configuration.

Imagine we even both like using the nerd tree plugin but can’t agree what the leader key should be mapped to in order to activate it: a common problem.

That’s why you see the most advanced vim users go back to a minimal vimrc which admittedly makes it a less useful editor.

I think we can all agree vims defaults are crap and without plugins it doesn’t have all of the features of a modern editor.

> it works out of the box with no configuration (batteries included).

You don't really believe that, do you? Competent users tend to have preferences. There's no need to worry about installing plugins if you have to have a .vimrc to begin with, just have the .vimrc do the installing as well.

Sure, but "Competent users tend to have preferences" doesn't exclude slow evolution of sane-by-default preferences for programs part of a same class. A newcomer text editor, say, comes in town, settles its default configuration as the sanest of previous generations, while existing programs of the same class are (reasonably!) stuck due to compatibility.

Which means newcomer text editors need less configuration, and users generally staying closer to the default stable, tested configuration.

You can argue that you're part of a margin needing XYZ specific setting, or that new programs don't necessarily make good default config choices. To me it feels generally reasonable to believe so.

Case in point, with text editors / light IDEs. I did Sublime Text -> Atom -> VSCode. At each step, the size of my config size decreased. Of course I still have a VSCode settings.json, but it's twenty lines. My sublime prefs are ~100 lines, my .vimrc is hundreds :)

The plugins you need to make Atom/VSCode great (no experience with modern Sublime) definitely count as configuration in my book, and often come with their own configuration load. If I sit down at a new machine, they won't be there. Most of my .vimrc is a couple of lines per plugin configuring the plugins, for example.
You're going to get a fuzzy file finder, Git integration, syntax highlighting, symbol navigation, and and a package manager immediately available to you in those editors. None of those are available in Vim by default; that's the inspiration for Amp.

There are additional perks to including things by default, too. Jump mode is a good example of that: it's integrated with its select mode. You can start a selection and then switch to jump mode to move the cursor to complete the selection.

Lastly, there's simplicity in including things rather than asking new users to pick from a dizzying array of plug-in options. Rails is a good example of this: there's a lot of functionality that could have been left to 3rd-party gems, but having the framework include them by default means they'll work out of the box, and there's a single canonical solution to [sessions, templates, ORM, routing, etc].

I don't disagree with your approach but I'd just point out, since it's a little ironic, that rust's standard library is a good example of the opposite approach!
Vim doesn't have syntax highlighting? News to me. Git and file finder is available to you by opening a new terminal tab/window and simply using git/standard unix utils. There's no need to integrate such features when you can extend a terminal into an IDE as your needs suit.
Fragmentation also hurts the ecosystem. Just look at Linux distributions or desktop environments to see the effects.

The best thing is to provide some sensible overridable defaults and basic functionality expected these days from a programmer's editor, such as simple project management: index files, fuzzy file finder, etc. Vim and Emacs are a pain in the butt for precisely this reason: they don't take ANY decision, they just throw the entire burden on the user. They're forgiven because they're classics, but any kind of editor launched in 2018 would be utterly ignored if it didn't have these features.

>> Fragmentation also hurts the ecosystem. Just look at Linux distributions or desktop environments to see the effects.

I don't think so. I've never felt that having 10 linux distributions was a problem, I just can pick between at least two super robust choices : Debain, RedHat. I can even choose between inkscape, krita, gimp. Or KDE and Gnome...

You can argue that progress would be faster if we have less choices but more choices also means more developpers...

Choice is a process which can hurt when it takes too long or when you lack the ability to execute the process itself or in a good manner.

See https://en.wikipedia.org/wiki/Overchoice and https://en.wikipedia.org/wiki/Analysis_paralysis

This is BTW no limited to OSS but AFAIK it comes from sales-research. People confronted with to many products of similar type can end in a deadlock, avoiding those products or even start to avoid the whole category.

> You can argue that progress would be faster if we have less choices but more choices also means more developpers...

More developers reinventing the wheel doesn't automatically make the wheels faster. It can mean healthy competition, but it also can mean wasted ressources. It's case by case.

yup, now that I read myself again, I see my bias. For me, more developpers working on several "identical" GPL'ed software makes the viability of the GPL software better... So, well, I'm biased :-)
On the one hand, I agree. I've spent whole days just checking out software alternatives, booting new distros, DEs, hosting webapps, just to see what they were like, and it's always great fun.

On the other hand it can hurt - for example I'd like to have my main workstation running mainly one gui framework. (Or at least, most of the software). But the KDE/GTK split makes the most popular and sensible software to use for most cases pretty much evenly distributed between those two. (Though this is obviously not a major issue, just an example).

It definitely hurts mainstream adoption. And it also kills distribution of most commercial desktop applications.
Amp, and convention over configuration in general, don't prevent configuration, they just try to avoid it. There are a bunch of things you can configure in Amp, if you'd like: https://amp.rs/docs/#configuration
That's not really what I was doubting (I could see that). I just doubt that it's likely to not need a configuration file if I were to replace vim with it. In GP's assertion that this is the best reason to use Amp over vim, that's not really a huge benefit in the end. A config is a config is a config, or something to that effect.
Unfortunately, configuring Vim is rarely just pulling a config file. Pathogen and Vundle have made installing/tracking plug-ins easier, but unless things have changed, those tools required their own bootstrapping outside of simply being referenced in the config.

And that's just for Vimscript plug-ins. There are several situations (e.g. fuzzy file finders) where external binaries are preferable, for performance reasons. The idea is to include those directly in Amp, so that it's _only_ a configuration file that's needed, if at all.

All depends on your taste. My .vimrc handles ensuring that I have a plugin manager installed and that it installs those plugins on my behalf if they aren't there. And I do all of that in ~10 lines of vimL config. It's totally reasonable to have your plugin/config ensure the external binaries exist as well. The popular golang plugin has a command for that.
I have not tried amp yet, but just as an example why I switched shell. I use fish shell because of the sane defaults. I don't want to be bothered with setting up code completion and history size.

Just install it and use it. Works.

I like projects that provide similar experience.

Yes, fish shell is a beautiful example of that philosophy! Its design documentation[0] reflects a lot of the values that drove me to create Amp.

[0] https://fishshell.com/docs/current/design.html

Also see: Ruby on Rails
Yep, another great example. :)
Yes I do. Ever use textmate or Atom? Sure you can configure a bunch of keys if you want to change them but nobody ever does.
This discussion reminds me of the classic "standards" xkcd

https://xkcd.com/927/

>and you aren’t able to just walk up to vim somewhere else

Is this something people do? I use a handful of machines and use git+stow for managing my vimrc. I've never had this problem where I need to "walk up to vim somewhere else" where I wouldnt just clone my dotfiles and stow my vim config. Takes all of 10 seconds and I'm up and running.

I often need to use vim in servers that are not solely administered by me. It seems like bad etiquette to impose my configuration on my co-workers, so we leave it mostly unconfigured on these servers. There's also cases where I want to use vim in docker containers running web servers to debug by tracing execution in installed libraries by inserting prints and repl launching function calls, etc. It doesn't make sense to bother installing configuration each time the docker image is rebuilt, or including vim's installation and configuration in the Dockerfile.

I just do this minimal configuration on starting vim:

    :se et ai ts=2 sts=2 sw=2
Just that makes it usable enough for me to not feel a productivity loss most of the time.

EDIT: Key to that is not being so reliant on plugins, of course. I used to use a lot of plugins, but then focused on learning more of stock vim features, and doing more things in the shell. I now feel more productive without the plugins.

For example, I used to use NERDTree, but now I opt for using :e's path syntax. I don't get lost looking for files in the tree, scrolling around, opening directories. I just type stuff like :e %:h/fi<tab><enter> or :e %:s?local?global?<enter> to get straight to where I want without having to look at anything. I can probably work in vim blind-folded without a productivity loss (the only problem being remembering enough of the files I'm working on) and I find that awesome.

You're sharing accounts on servers or logging in directly as root? Either one sounds like a recipe for disaster.
Sharing a normal user account. It's not ideal, but it's not that bad either. I think you're missing a lot of context to properly judge this, but to keep it short and avoid divulging details it boils down to balancing costs, risks, and benefits. Remember you know nothing about my work. It's easy to underestimate costs, overestimate the risks, and overestimate benefits without being fully informed of the situation.
i switched away from emacs, and learned vi just because of that. to many servers with different versions of unix to make it worth the effort to install a different editor or customize its configuration.
I'd say yes; there are many times I've ssh'd into a server and wanted to do a quick edit where I don't have my vimrc; not going to bother to install it.

Complexity increases when you want one vimrc with many plugins to work on Windows, Linux and OS X, and both in your work and home environments.

I'm not arguing that Amp is the answer. I don't think I'd stick with vim as my daily driver if I couldn't customize it, and have the plugins I do.

In my routine work in an academic lab, im using 10-15 machines plus a number of GCP instances. Syncing a .dotfiles repo is a huge pain, especially when you make a small change on one machine and don’t want to push/pull ever time you want to do anything on another machine.
I fixed this problem for myself by automatically pulling down changes in the background upon opening a new terminal.

Since checking on every terminal open is unnecessary, I check on a probabilistic basis based on how often the backing git repo changes (0.5% - 3%, different repos for vim, dotfiles, configs).

> I thought it was pretty clear actually: it works out of the box with no configuration (batteries included).

Actually, no. This is not clear at all looking at the website. Unless you assume that vim does not come with "batteries included", which sounds wrong to me. I for one use "raw" vim, without plugins nor configuration, and I am very happy with it.

(Strictly speaking, this is false: I have "set t_ti= t_te=" in my .vimrc so that the screen is not cleared when I exit, but I suppose this kind of fringe features are OK to be user-specified).

> I have "set t_ti= t_te=" in my .vimrc so that the screen is not cleared when I exit

Oh wow, this is super helpful. Thank you!

wish neovim could do that too
Thanks for the tip
I use vim because I don't want the features of a "modern" text editor. My .vimrc is fairly basic at under 100 lines, and I only have a few plugins, which is mostly syntax files and syntastic.

I don't use stuff like NerdTree (I used to, but ended up not liking it), and mostly just stick to the features that come with it. As such, I can be very productive without much configuration at all, which is much of the reason I used vim in the first place.

I don't want another spin of vim because I lose one of its biggest benefits: ubiquity. The further I deviate from the base configuration, the less useful having vim available everywhere is.

I can appreciate that. Amp's keybindings are fairly close to Vim's, so it's not like you lose the muscle memory you've built over the years.

Amp's additional features are really geared towards project-based development, so ubiquity isn't as much of a concern; it's not meant for editing sporadic config files on your server. Vim is still a great fit for that, at least until someone gets Amp adopted into the main Ubuntu server repositories. ;)

> Unlike Vim, Amp doesn't provide split panes, and support isn't planned

That's a pretty big missing feature that is included in vanilla vim...

100% deferring to tmux, there. It just adds so many great features, I think it'd be a mistake to re-implement them in Amp. Paired with the fact that Amp is cheap on memory, and has native clipboard integration, this isn't as necessary as you might think; you can still move content between panes! :)
with split panes in vim i can have the same file open at two different places. can't do that with split panes in tmux.

greetings, eMBee.

Ah, you're right; thanks for clarifying!
also, i developed a plugin for vim that compiles code for me and sends the output to a second buffer.

sure i can make that work with tmux. codewise it would even be easier, but only if i can trust the user to put all the pieces together for themselves.

if i want to build an end-user friendly package, the whole thing suddenly becomes a lot more complex:

it's no longer enough to say: load this into vim and you are done, but i need to check that tmux is not only available but that the editor is running inside it as well. and i have to prepare that users will ask me to make this work with screen or any other tmux alternative.

greetings, eMBee.

Could make do with tmux panes I suppose, but I agree, if you're going to go head to head with Vim that's a big omission.
Why not just rely on tmux panes?
It'd prevent me using the Vim clipboard ('registers') between files. That's bad enough. It'd also prevent me using Vim macros to easily shuttle data between files.

I may also want to ctrl-z Vim to run a few quick commands before resuming Vim with fg. Using tmux panes, I'd only get a small window to run those few commands, which doesn't reflect my intent. (Yes, I could use another tmux window for this, but I like this way.)

I suspect it would also mean more keystrokes.

Amp has native clipboard integration, so content will carry between different instances. Configuring the register => clipboard was something I personally disliked when configuring Vim.

Amp also supports suspending (hit "z" in normal mode) as I use that workflow all the time. As for the small window issue, you can "zoom" a tmux panel with <leader>-z. I get that this is less than ideal if you're used to the suspend action collapsing all panes by default (and expanding them on resume). Workflows are tricky; to each their own, I guess! :)

Not everybody uses tmux for one.
Author of amp here and I couldn't have explained this any better.
Even if you were someone for whom the page is clear, you might still be confused by why someone who would need to take a not insignificant amount of time getting their development machine installed and configured correctly but would balk at having to type - just once at any point during the lifetime of their laptop - a single git clone to pull down their config.

Neovim (https://neovim.io/) makes a thing about how it's got "strong defaults" but there's got to be the least compelling reason to use it.

Newcomers to vim are generally encouraged to use it as-is and make their own config changes as and when they need to, and experienced users will have config which gets enhanced to meet whatever circumstances they're confronted with, but none of this requires a completely different editor.

There are quite a few areas where Amp diverges from Vim; minimal configuration is just one of those. It's inspired by Vim, but it's not a clone. Yes, it's modal, and yes it's a TUI app, but there's much more to these editors than that.

That said, I think it's pretty clear one of the first things I need to add to the website is an answer to "why would I use this instead of Vim"?

Finally.. the irssi of editors.

The popular irc clients (terminal-based) like ircII used to require a lot of configuration and setup to get going. Eventually irssi appeared, with sane out of the box defaults, including a dash of color.

I always thought we needed something similar for text editors.

As an emacs user, I have a medium sized .emacs config file. Moving from one emacs to another just imply reinstalling 2 or 3 packages and copying my emacs file. That's no hard work.

And whenever I need to use somene else's emacs, it's even simpler : there's no emacs in the real world :-) (neither vim :-)) I mean those are "niche" editors, not used in huge parts of the IT world. So worrying about their ecosystem is a bit, well, exagerated, imho.

> I thought it was pretty clear actually: it works out of the box with no configuration (batteries included).

Vim works out of the box (heck, even old-school vi did.) Amp seems to provide more out of the box, but also explicitly states plans a runtime and plug-in support for extensibility, so apparently it still recognizes that complete out of the box is an unattainable goal given diversity (and conflict) of user needs.

I think one of the main reasons it exists is that it's written in Rust. One clue is that the TLD is .rs, plus there's been a lot of "a <type-of-program> written in Rust" lately. Which is fine; it's just an observation. I myself am going to be getting into Rust soon, hopefully.
Yes, this is definitely one reason. At the time, I was interested in working on Vim, but it's hard to make changes to a C codebase and be confident you won't introduce segfaults or subtle memory safety issues.

Rust's "hack without fear" mantra definitely applied here. :)

being written in rust might make it more appealing to develop, but it doesn't give any benefit to the user and I can't see it being a reason for someone to use this over vim
Rust programs tend to be more stable, more efficient, and more highly parallelized than equivalents written in other languages by developers of the same quality.
Again, I am not sure when is the last time vim crashed on my *nix set up. Not trying to sound unreasonable but in this argument of VIM/amp it might not be relevant.
It depends upon plugins. My Vim is quite prone to crashing but I'm fairly sure it is one of my plugins.
Yeah, more than likely. I'm down to just a handful of plugins and don't recall it crashing in the last couple of years, and I use it a lot.
False advertisement is false. Please refrain from such statements as it actually hurts the language more.
I think that that statement is true, the "tend to" and "same quality" are very important qualifiers though.
I think it's a lot easier for someone to learn a new language, or learn the benefits of a new language, by recreating something which already exists.
I usually go for irc bots when trying to learn a new language. I already know the api and the thought process which makes it easier.
> there's been a lot of "a <type-of-program> written in Rust" lately

It's the new Go.

I do wish there were more modal, terminal-based text editors that weren't so similar to Vim.

Kakoune is Vim-like, and now this.

> modal

Bill Joy: “One of the good things about EMACS, though, is its programmability and the modelessness. Those are two ideas which never occurred to me.”

“People don't know that vi was written for a world that doesn't exist anymore.”

Oh, I so disagree. Modal editing is not about the modes.

In a text editor, user input either writes text to the file or does something else. Every text editor let you write to files so aside from aesthetics, it's the everything else that makes each different. If keystrokes for writing are not separated from keystrokes for everything else, everything else is confined to awkward ctrl- and alt- key combos. That's why it's a good idea to put them in different 'modes' so you can perform other actions comfortably. You don't need more modes than 2. Actually, in vim, you could see command mode and the visual modes as extensions of the normal node. Modes are really just a metaphor.

I on the other hand would like to see other non-modal editors. Vim is already the best and most customizable modal editor, but does anyone know a good non-modal editor beyond basic nano?
I've been using Joe's Own Editor the past couple of years when I want to do basic view/editing in terminal (I use Sublime Text for development). Really like it because it provides syntax highlighting for a ton of file types, let's me get around with arrow keys/mouse, and gives me an easy way to look up keyboard commands I may have forgotten.

https://joe-editor.sourceforge.io

You can install it with your OS's package management system, and there's a Windows installer on the site.

I did adjust some of the default settings, which are configured and well documented in a .joerc file.

> Vim is already the best and most customizable modal editor

Weird statement. "Best" is up to debate, but "most customizable" is definitely Emacs.

I cannot really imagine a really good non-modal programmer's editor. Surely it should behave differently when editing Python compared to editing HTML?

You're using the emacs definition of major modes. "Modal editor" has a different meaning. Vim has three modes [1]. Emacs is not considered a modal editor, but some of its features are similar to Vim's last-line mode.

[1] https://alvinalexander.com/linux/vim-vi-mode-editor-command-...

Run Emacs in Evil mode or similar and you get modal editing inside a special editor mode. If anything, Emacs is an extra-modal editor. :)
Emacs is IDE, like Eclipse or Idea. It contains text editor, of course, but it much more than just text editor. It's not fair to compare say GEdit and Eclipse in terms of configurability, because GEdit is text editor, while Eclipse is IDE.
mcedit (part of mc) in gnome-terminal currently the best non-modal editor, AFAIK, especially when you like to use mc to navigate file system.
What an unfortunate name. All search results are for the Minecraft editor.

It's also fairly obtuse for non-experts. A champion non-modal editor would have a learning curve as shallow as nano but more depth that could reveal itself over time.

It predates Minecraft by about a decade, I think.
Do you know about micro? https://github.com/zyedidia/micro
It is indeed quite amazing how modal editing is usually defined by vi, which does so in very specific ways, when there are alternatives (like kakoune) which really show there's a whole spectrum of possible implementations of that idea. I wish there was a modal editor with the same scope as nano which would help introducing that concept to newcomers without aiming to maximize productivity / expressiveness.
Well, nano is modal. If you press CAPS LOCK you enter "uppercase mode" :)
Sounds like navigation might be different, but the linked page is a bit cryptic:

> Fast, precise cursor movement without repetitive keystrokes or fancy expressions. Look where you'd like to move, and type the token. That's it.

Digging a bit more, I found this [1] (in addition to the normal h,j,k,l, etc.):

> Jump Mode

> Press f to switch to jump mode. Elements on-screen will be prefixed with a two character jump token. Type the characters to jump to the associated element.

> For files with syntax support, you can jump to class, method, and function definitions using symbol mode. Hit Enter in normal mode to use the symbol finder, which works identically to open mode

[1] https://github.com/jmacdonald/amp/blob/master/documentation/...

This is similar to the vim-sneak plugin for Vim: https://github.com/justinmk/vim-sneak

It's very useful.

Looks similar to the Emacs Ace Jump mode too: https://www.emacswiki.org/emacs/AceJump