Hacker News new | ask | show | jobs
by tbrock 2762 days ago
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.

10 comments

> 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!
You're absolutely right. :)

I'm going to resist adding everything but the kitchen sink to Amp. Upcoming features like tasks and language server protocol support will allow Amp to integrate with language/framework-specific tools as easily as possible, but without steering Amp towards any specific choices. I couldn't avoid that with syntax highlighting; it's just too essential (and it powers the symbol jump mode). It's definitely a balancing act!

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.
Vim has very simple highlighting, and doesn't support symbol jump; that's why ctags is an external dependency for that behaviour.

As for a file finder, I'm curious how you can use a separate tab to open that in the current instance of Vim? From when I'd last used it, most folks were using Ctrl-P to solve that problem, and usually with an external indexer like fzf or ag.

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.
It ensures you have a plug-in manager installed, but it won't install it for you, right? I know that might seem like a minor nit, but if package management is considered an essential part of Vim, I'm of the mindset that it should work out of the box.

That said, Amp doesn't have plug-in support at the moment, so it's a little unfair for me to judge Vim on that front. But if it did, the package management portion would be baked in so that you'd only need to pull your configuration file and Amp would handle the rest. :)

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.

It's possible to run a command in another tmux pane; I forget the specific syntax but I've tested this in the past and it works. The only thing the editor needs is a task runner (this is a planned feature for Amp); the task that's run is prefixed with the tmux command that triggers it in another pane.

The only thing that's bespoke to tmux is knowing which pane to target; you'd need to collect that from the user on the first run, or allow the value to be configured.

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! :)

> Amp has native clipboard integration, so content will carry between different instances

By "native" does that mean an X-server's clipboard? So when you're running it on a machine that has no X-server running (a typical server), there is no clipboard?

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.