Pamela Fox demonstrates in this rare display of developer humility that one needn’t be a power user of their editor to get stuff done. I appreciate that, especially in contrast to the evasions of past guests who can’t seem to admit that they actually have any practices that they would personally cop to being bad.
Setting that aside, though, I’m trying to understand the advantage of (neo)vi(m) keybindings over the conventions of GUI text editing contexts. For example, on a Mac, command+arrow takes you to the beginning or end of a line (horizontally) or document (vertically). Option lets you move by word. Doing any of that and adding the shift key selects text. IIRC, Windows has similar equivalents. Combine those keyboard conventions with the command palette and multiple-select patterns popularized by Sublime Text and you have a pretty efficient workflow with a much shallower learning curve. I can imagine if a good portion of your day is spent in an environment without a GUI, it would make sense to get pretty good at vim or emacs, but I would genuinely like to know, what is the case for GUI users to learn vim deeply?
I’m sure there’s no particularly good argument in favor of it, and I no longer actually recommend it to anyone, but having typed vimtutor
one day 18 years ago, I’m too far gone to learn anything else. If you go through vimtutor
and that’s not the path your life takes you’ll probably end up happier and better-adjusted than I am.
I was a GUI user, but switched to vim(likes) for accessibility reasons.
So for me it’s not about what I can do, but how. I can do everything in my entire setup and never have to press more than one key per hand at a time, and rarely have to hold a modifier key at all.
My editor, web browser, window manager, email client, etc etc all work like that.
But yeah, I would never really recommend any of this to anyone who doesn’t need it.
I think I can relate to that. Started using touch input and key-navigation because I had to reduce the wrist pain from using a mouse.
Another vote for accessibility here. I have cerebral palsy and was developing wrist pain when using modifier keys. I switched to a vim layout and made extensive customisations to eliminate the need for modifier keys. This is purely anecdotal, but the problems have not recurred since I made these changes.
I really need to do a full post on this, but some of the specific vim motions i miss in vscode:
vi{char}
selects everything inside a quote/parenthesis/curly braces/sentence."Ay
appends your selection to the a
copy-register, which makes it easy to go through and collect a bunch of different little things to paste all at oncezf
lets you create new ad hoc folds over arbitray parts of the fileguu
lowercases the entire lineEach one is those is only a small boost to my productivity, but when I have 200 small boosts it adds up. That said, I avoid vim emulation in other editors. It’s easier for me to switch between two sets of muscle memory if they’re very different.
I’d love to read it. You have a great blog. Based on this summary alone, I’m not sure how or if I would use these features, but perhaps if I could see how you use them, in other words, in what context, that would be very interesting.
Have you tried reporting those? I got some vi behaviours fixed that way. vi(char) may be easy to add since I remember using di(char) and that worked fine.
Option lets you move by word. Doing any of that and adding the shift key selects text.
Vim lets you use ctrl+arrow to jump by words as well. Useful in insert mode when you do not want to go back to the command mode for some reason. People should be able to discover that just by muscle memory, so it’s somewhat awkward that she did not stumble upon it. Yikes.
Vim’s [v]isual mode lets you move around your cursor to prepare a selection (instead of holding shift all the time) and then [d]elete it, [y]ank to [p]aste elsewhere. Among other possibilities. She would probably like it, since you can e.g. search using slash to locate where you want to place the end of the selection.
Or on a one uses Pos 1, End, Ctrl, etc. when hot on an Apple device.
I think they are just good, proper Editors of which there aaactually see rest few, GUI or not. They’re usually slow, resource hungry, inflexible, hard to impossible to configure, lack features one wants or just have but been designed well. Sometimes they suffer from instability, as in new versions (minor or major) breaking things.
That’s a general theme with software. It also applies to editors of course and when you have something reliable then you stick with it. For many people that’s something like vim or emacs.
It’s often the first editor that’s “good enough”. And if you are at any time SSH into something chances are you get to learn vim or nvi in the end. Even if nowadays some systems have other defaults. They tend to not be really great.
And once you know it you end up using it locally now and then, then it becomes a habit.
I think it’s easy to overestimate how much choice there is when you have a few requirements for editors.
Came in handy for my bitwarden client. The “big” things like argon2, http, json, were all provided by std.
Now if there were an easy and ubiquitous way to depend o zig libs, it wouldn’t matter so much if it’s in std. :)
You mean an automated way to retrieve dependencies? Like a package manager? If so, I believe that’s planned and in the very early stages of development. If you’ve been getting a kick out of Zig (and have more free time than I do 😅), you might even consider contributing!
Yes it was a poor veiled reference to that. :)
I have contributed in the past and hope to be able to do more of it.
Ours isn’t that bright. It chews on the kids shoelaces and keeps trying to climb up the foot of the pedestal fan.
Zig is the only one I have learned in-depth lately.
It’s the “better C” for me. It has taught me that dependent(ish, limited to compile-time values) types aren’t that scary, but very useful, and now I miss them elsewhere.
I guess I want projects then, in this model, since products always turn out bad and are then replaced with other products, while projects live on as long as we keep them alive, by using and cultivating them together.
I am using Purelymail at the moment, after switching out from GMail. I ended up with them mostly because of their pricing, lack of arbitrary limits and it being a one-man operation that was unlikely to succumb to “growth mindset” fueled scope creep and enshittification. I’m coming up at over 3 years of using Purelymail and I don’t think it has cost me more than $25 total in that time, if even that.
I initially felt that the lack of a “fancy” webmail (Purelymail uses RoundCube) would be an annoyance but Purelymail using regular IMAP/POP lets me use essentially any alternative I want and it works out fine in practice.
After the email provider I used, OpenMailBox, disappeared for years suddenly with almost no communication (before being sold on) - I would never recommend using something that wasn’t one of the big email corps.
I have also moved all my domains to purelymail hosting and I’m not worried because emails are not precious. :)
Fully endorse the service, it’s been faultless for multiple years.
Emails themselves aren’t precious but if I were to lose access to my two primary email addresses I’d be potentially locked out of a lot of things due to recovery/verification email flows.
You can move to migadu quite fast if you use a DNS cache like CloudFlare.
Is migadu that big? Anyway, it was meant as a fallback to recover usage in case of purelymail going down.
The Cloudflare part is. They are attempting to centralize the internet by offering a lot of their loss-leading services for ‘free’.
“the point”
Surely this depends on the user.
Personally I’m on migadu just because I needed something to host mail for a few domains reasonably cheaply, and I liked their documentation, not ideological reasons.
Oh for sure, and I’ve only used custom domains for critical stuff for over 20 years. Just thinking if somehow GANDI or Google died tomorrow I’d have an unpleasant time for a bit.
Not really, I use a custom domain and have automated backup jobs that run every hour to keep a portable copy of the email should I need to migrate in a hurry.
I would genuinely love AP over IMAP.
I want to get my friends’ post into folders with their names on them. It would be more like a messaging app than twitter-style firehose, but I could use the email client that’s accessible to me.
Might be something that could be implemented as a Dovecot storage plugin to save a lot of the IMAP implementation hassle (obviously with something else putting the AP stuff into the storage.)
Found this exchange about premature optimization amusing.
However, hiding a miniature architecture-specific compiler inside a file system seems to be a rather blatent example of “premature optimization”.
Ted, this project is 15 years old.
Interesting way to get away from those painful key combinations.
My entire computer setup avoids those almost entirely. When there is one, I can press it with the thumb on one hand (thanks to the keyboardio layout), while the other hand presses the next key. So never more than one key per hand.
But the editor (and browser and other programs) achieves that in the more traditional way of being modal.
I came across this language recently when I was looking at Invidious.
It says that “Invidious requires at least 512MB of free RAM (so ~2G installed on the system), as long as it is restarted regularly, as recommended in the post-install configuration,” which made me curious if “restart regularly” is a Crystal thing or just an Invidious issue.
Could you combine it with user-defined literals like 2021_year
and 23_day
for even more suffering fun?
Forcing people to open a link in a particular program, against their will, is called an “experience” in corporatese? It’s a bad one I suppose.
It’s as dumb as adding target="blank"
to all your external links on your website. Sure, current tab is optimal which is why we don’t do it to our internal links, but we are special so your tab to our site must never go away lest you forget how the back button works.
Web app & website are things I distinguish as different despite using the same platform and technology. There’s a higher chance that this is the right UX call in a web app.
Come to Bitwarden. It’s nice over here. Really starting to feel like one of those rare “wow companies can be this good?” situations.
Come join. Pay them. Give them a reason not to pull this shit on us all 👍
Lastpass was closed source. Bitwarden is open source on both the client and server side, and was audited by Cure53. There is also a community-maintained alternative lightweight server implementation for people who want to self-host on a raspberry-pi or cheap VPS.
I can’t say the same about 1Password which has semi-opensource client, and closed source server. I’m more concerned about 1Password being the next Lastpass.
Can confirm, the Rust VaultWarden server implementation is super light-weight and enables some nice premium features (group vaults, TOTP) for free!
Nice setup, releasing 1.0.0 on may 15th 2015, and then making new releases every 6 weeks just to release 1.69.0 on 4/20.
It’s not planned - Rust introduced a 6 week cycle on Friday, Jan 9, 2015, and released every 6 weeks after until one version was considered safe to call it 1.0. https://blog.rust-lang.org/2014/12/12/1.0-Timeline.html
What’s the symbolism behind 2015-05-15? I know about 69, 4/20, and May the 4th but that one escapes me.
Nothing that I’m aware of, I just meant that it’s 6 × 61 weeks from 1.0.0, making it seem calculated from the start of the 6 week schedule (I don’t know if it actually was).
I knew of the shakuhachi, but not much more about it. This article made me go and read more about it. It’s really cool how similar it is to some traditional flutes and folk musics we have here, 8000km away, down to a similar usage of “flat” (in relation to 12TET) notes.
I also learned recently that we have a similar simple pitch system in our respective (unrelated) languages, and we both have /ɽ/. :)
There is some support for accessibility in 1.0: https://github.com/slint-ui/slint/pull/1294
Those LSP inlays are neat.
Before:
var prelog_req = try http_client.request(
prelog_uri,
.{ ... },
.{ ... },
);
and after
var prelog_req = try http_client.request(
uri: prelog_uri,
headers: .{ ... },
options: .{ ... },
);
The “named parameters” are virtual text and come from the parameter names in the source code.
I never understood nor liked them: When in process of typing these arguments, there is signature help, and when I need info later, I can look at the hover help of the function, while inlay hints (in my eyes) just take space and create visual clutter.
That said, I’m glad it got added to Helix for all those who want/need them! I can just not enable inlay hints, but it increases use and thus potential developer manpower for Helix. I think it’s really great to have a modal editor with batteries included, even if nobody uses all of those batteries.
I also hate the added noise, but I added this to my config.toml
[keys.normal.","]
h = ":toggle lsp.display-inlay-hints"
Maybe this way makes more sense to you as well. As a thing you can toggle on for a sec when needed.
I always thought awk was only used for stdin, stdout manipulation and getting a certain column out of inputs. Do people really create projects with awk and how does that work?
Please see my other article, it replies your question: https://maximullaris.com/awk.html
I liked this “old skool demo in awk”, showed me a more creative side of it.