My wife was unimpressed by Vim

LinearArray@programming.dev to Programmer Humor@programming.dev – 934 points –
176

Maybe she just wasn't impressed by your noob skills and is having doubts herself?

My jaw literally dropped reading that.

I think it's time to go outside.

This relationship can be saved as long as the guy's wife does not start expressing an interest in Emacs. That would, of course, put an end to the relationship, but if she's one of those "Notepad is all I need" types, there is hope this can be worked through.

Maybe she already evolved past vim to kakoune. 😎

and evolved past kakoune to helix

I actually went, emacs -> vim -> helix -> kakoune.

I went helix -> vim -> emacs -> kakoune -> neovim, super interesting to see how people's experiences differ

You made me look up helix again after a few years and it's gotten pretty sick actually. I might main it for a while to see how it fairs. It's fairly similar to kakoune of course, but it'll take a while to get all the modes into my muscle memory. The similar actions are in different modes and there are many more modes in helix as far as I can tell. But it's cool, looking forward to experimenting.

"nothing fancy" that's the issue, just some jumping won't impress her; you gotta do the real crazy shit. Friggin "wife not impressed by my cooking? I make a hard boiled egg and she isn't impressed"

He should have installed neovim with LSPs for Python/Rust/etc for intellisense and linting to really get her all hot and bothered.

"See if you just learn these 87 simple keyboard shortcuts, you won't need to simply drag with the mouse and cut and paste at all!"

> my wife

> vim user

fake

At first, I was mad. Then the slow, sad realization that you're more right than not...

Hey I’m married and use Vim. I feel attacked πŸ˜…

As someone who's been a software developer for over a decade and in IT even longer, I still don't use vi/vim for anything other than when crontabs have it set as the editor.

alias vi=nano

export EDITOR=nano.

But (neo)vim is amazing so there is no need to do that.

I transfer all my files over to a Windows machine and edit them in Notepad

Based nano user

From my .zshrc (typing this on mobile so cope if it's wrong)

case "$OSTYPE" in
  linux*)
    export EDITOR=nano
  ;;
  freebsd*)
    export EDITOR=ee
  ;;

I guess shell languages can't do this:

export EDITOR=case "$OSTYPE" in
  linux*)
    nano
  ;;
  freebsd*)
    ee
  ;;

You can set your default editor (maybe in .bashrc or .bash_profile? I forget), but I'm far too lazy.

Honestly if you don't use vim motions in your ide of choice, you're missing out big time. Being able to do things like "Delete everything inside these parentheses". di( or "wrap this line and the two lines below r in a pair of {}" ys2j{ , or "swap this parameter with the next one" cxia]a. with a single shortcut is game changing.

Even just being able to repeat an action a number of times is ridiculously useful. I use relative line numbers, so I can see how many lines away a target is and just go "I need to move down 17 lines" and hit 17j.

Absolutely insane how much quicker it is too do stuff with vim motions than ctrl-shift-arrows and the like

That's really neat, but I don't think I do that often enough to really make the performance hit of learning a whole new thing and memorizing keyboard shortcuts and commands worth it. I don't find myself refactoring code a ton, especially after moving to a more TDD-like model.

It's less about refactoring and more about navigation of your code while editing. Ever wanted to delete a single word? daw deletes the word your cursor is currently in. How about "copy everything up to (but not including) the nearest "D" on the current line? yfD.

The whole point is that editing code in the middle of writing it, not just refactoring it, is immensely faster.

Absolutely insane how much quicker it is too do stuff with vim motions than ctrl-shift-arrows and the like

Those tasks are a very small part of work time, so most people don't feel the need to optimize it.

As a software dev, they're significant parts of what I do

Are you one of those rare developers who spend most of their day actually coding?

Yes, absolutely. And I refuse to let my day be anything else! :-)

Only if you use a qwerty keyboard, otherwise it's just annoying as shit

ive heard women are into emacs these days

We are, but, like... Just preferring something else doesn't make vim unimpressive. Silver medal's still pretty fucking prestigious, you know?

I'm sorry but your wife won't be impressed by basic vim motions. You need to learn some more advanced motions to get her wet.

I refuse to see how vim and emacs is worth learning. I only use it because that's the only option when editing server files. Beyond this, I couldn't imagine coding in these environments from scratch.

The biggest benefit of (neo)vim is the motions.

Honestly if you don't use vim motions in your ide of choice, you're missing out big time. Being able to do things like "Delete everything inside these parentheses". di( or "wrap this line and the two lines below in a pair of {}" ys2j{ , or "swap this parameter with the next one" cxia]a. with a single shortcut is game changing.

Even just being able to repeat an action a number of times is ridiculously useful. I use relative line numbers, so I can see how many lines away a target is and just go "I need to move down 17 lines" and hit 17j.

Absolutely insane how much quicker it is too do stuff with vim motions than ctrl-shift-arrows and the like.

Honestly those things just don't sound like common enough actions to be worth shaving 0.5 seconds off. How often do you know exactly how many lines to move a line by? And how often do you even need to move a line that far?

I still don't buy it.

Relative lines means each line except the one your cursor is on is relative to your current line. Like this:

5 5k jumps here

4

3

2

1

6 your cursor is here

1

2

3

4

5

6

7

8 8j jumps here

The main reason I like it is I don't like mouse ergonomics. Keeping my hands on the keyboard just feels better

Yes I understood that. My point is how often do you know you need to move a line exactly 17 lines? Do you count them? Clearly much slower than doing it interactively by holding down ctrl-shift-down for a bit.

I just look at the line number. If the code I want to edit is 17 lines up there's a 17 next to it. My ide window looks like my comment. Normally an ide would look like this

1

2

3

4

5

6

7

8

9

10

11

As a vim user myself, I don't understand why you need relative lines either. I can just as easily type :23 to go to line 23.

Mostly a matter of taste I think. One benefit is one less key press since relative keys shouldn't need to press enter at the end of the command. I mostly use it because it came default with LazyVim.

Thoose are line numbers in IDE. You don't count them, you see them

Line numbers are absolute, not relative (normally anyway; I think some editors allow showing relative line numbers). Anyway I think holding down (page) up/down is going to be just as fast.

There are both modes for absolute and relative line numbers in vim. Holding up/down might be intuitive nd easy to remember, but saving 1 second everytime you need to do this can add up pretty fast

1 more...
1 more...

Not "move the current line of code", but instead "jump the cursor a number of lines"

Oh so like page up/down then? Not exactly showing the raw power of Vim when you can use an existing key press! πŸ˜„

I can't tell if you're trolling; Page up and page down are different from "I need to jump 10 lines down" with 10j. Or 11 lines with 11j. Or "Delete the line I'm on and the six below it" with d6j.

They're not significantly different. Maybe it takes you 1s and me 2s. Not worth the effort of learning. Especially because Vim comes with significant downsides compared to full IDEs that will make you slower overall.

Name a downside, I'll tell you how you're probably wrong

You can't have a full integrated debug session with a watch window, locals (with an expandable tree for objects), stack, breakpoint list all visible at once. I.e. something comparable to this.

You can get pretty close to the same experience with https://github.com/mfussenegger/nvim-dap, any others?

If you consider that "pretty close" then I think you're going to dismiss anything else I say as insignificant anyway.

I do; you're only dismissing it because it's formatted differently from the exact workflow you're describing, but it's certainly just as powerful if not more so

1 more...

Honestly if you don't use vim motions in your ide of choice, you're missing out big time. Being able to do things like "Delete everything inside these parentheses". di( or "wrap this line and the two lines below in a pair of {}" ys2j{ , or "swap this parameter with the next one" cxia]a. with a single shortcut is game changing.

I read things like this and feel like I do a different type of coding than everyone else does. I'm not generating code at this speed.

Yeah exactly this, the main bottleneck when writing code is either reading the existing code or thinking about how I want to implement some logic, not how I move my cursor and writing the code itself.

Being able to do things like "Delete everything inside these parentheses". di( or "wrap this line and the two lines below in a pair of {}" ys2j{ , or "swap this parameter with the next one" cxia]a. with a single shortcut is game changing.

Those are handy, but most IDEs make at least the second two easy to do without reaching for the mouse (not sure about the first one), and for most people the other conveniences offered by IDEs are pretty attractive. I do use vim when I'm working in the terminal though, because it's solid and handles large files better than anything else I know.

I have most of the features of an IDE in my neovim config; name a feature and there's almost certainly a plugin for it!

Those are just a few small examples. One of my favorite things that vim enables for me is working with text objects. Things like functions, variables, classes, conditionals, paramters... Etc. Any action works with any text object - Want to jump to the next function in the file? Copy everything inside of a conditional? Cut everything up to (but not including) the nearest capital D on the line? Delete just the word your cursor is in the middle of (and one of the spaces around it)? Delete the current line and the N lines below it?

The motions make editing code incredibly fast, and I still have modern features like variable completion, copilot, intellisense, 'jump to definition', "hover" information, fuzzy search in project... Name a feature. I highly recommend giving it a closer look for stuff like that.

That does sound pretty good, and all without an IDE that hangs several times a day too. I haven't really taken advantage of vim's power.

For me that's not how it works. there is no way to escape mouse. People use Jira, Figma, Charles, lots of different software that just doesn't have support for Vim like keys.

Vim is good at editing a single file at a time. In my case I do like 95% reading and 5% editing. Most of the time there are bugs to fix, in a day I might read 20-30 files and change 5 lines in 5 different files.

now add one more detail. None of my coworkers know Vim so when I ask for help I need to make sure I turn Vim shortcuts otherwise they won't be able to help.

you can go on GitHub on any repo and press . you will get vscode in your browser. Did same with my server and after that I just never want to look at Vim. If I have to use cli then I will install micro editor

1 more...

Feel it's worth noting that ys[motion][symbol] is a plugin (vim-surround or nvim-surround at your option) and most IDEs therefore don't support it

Also as for plugins, Tim Pope's vim-argumentative is another one I love. "Swap this parameter with the next one" is >, and "swap this parameter with the previous" is <,

Ah right, I forget that that one is from vim-surround. Though I know some ides do support somewhat custom vim-configs!

I didn't know about argumentative, my swapping is powered by Tree-Sitter

2 more...

I only use it because that’s the only option when editing server files.

suggestion 1: use nano. Unlike vi(m) and emacs, it's meant for humans, all the command shortcuts you can execute are listed at the bottom.

suggestion 2: browse the servers in question via your file explorer (sftp://user@server or just sftp://server) of choice or WinSCP if you're on windows, open whatever file with your local graphical text editor of choice.

My hardcore old IT dudes mocked me once like, "why install Nano? Vim is right there."

And I had to explain to them that I don't live in the terminal.

They didn't install Nano and I spent 5x longer trying to get the settings correct in Vim.

I learned vim in college when I needed to edit files over ssh. It's incredibly impressive as far as cli editors go, but I just don't see how it's more productive than a well set up ide with hotkeys.

I barely know Vim, I'm an Emacs guy. Every time I pair with a colleague using an IDE, I find myself having to exercise great restraint, and not complain about how slow and fussy everything they do is. When I've worked with skilled vimmers, I have to admit that they invoke the deep magic nearly as efficiently as I do. Hotkeys? Pshaw, child's play.

it's just reliable. especially with remote work, everything is "over ssh", and you can create a very consistent environment with only a few config files

the amount of AI you can get into these IDEs is impressive, though. probably the only reason I'd ever make the switch

Most of the productivity comes from the motions; Being able to jump around the text incredibly fast, combining motions with actions and repeats, it's unparalleled in the sheer speed. I can delete an entire function with the same basic pattern Id use to delete a word.

daf -> Delete the current function my cursor is on daw -> Delete the current word d3af -> Delete the next three functions

Stuff like that, but with everything

By the way, for editing server files consider nano. It's also widely available, has simpler shortcuts and displays them on the screen. It's obviously not powerful like vim, but a good match when you just need to edit a config file.

Nano is just as fiddly as vim and way less powerful when you actually figure out what you're doing though?

Ie a completely redundant piece of software that has no place being pre-installed anywhere

how is it just as fiddly as vim? it's the only one that's even half intuitive

Where "intuitive" means "shows important shortcuts on the bottom of the screen".

It's sufficient as a basic text editor, in the sense that it allows me to edit configuration.nix to include helix (a couple of years ago, nvim) without having to learn it because the commands to save and quit are, as said, displayed on the bottom of the screen. That's about the extent of nano's feature set, anyway, it's a text editor, and a simple one as that, doesn't even try to be a code editor.

When it comes to actually being intuitive though I vastly prefer the old DOS-style editors. The editor that shipped with it, as well as the likes of Turbo Pascal. "Press and release alt to get to the menu bar" type of interface: It allows you to have an at least half-way adequate feature set without requiring people to learn shortcuts. If Turbo Pascal displayed all its functions and their shortcuts at the bottom it'd take up more than half of the screen.

Really, "intuitive" when it comes to UI generally means "dumbed down, featureless". Once a program actually has features things quickly become complicated and it's counter-productive to keep things usable for users which aren't willing to set at least a modicum amount of time aside to learn the very basics. The Blender Fundamentals series is what two hours of video. Text editors can get away with less as the feature set isn't as broad but you should be willing to go through at least half of of the tutorial which is going to take 15 minutes or so, both for vimtutor and hx --tutor.

I just find the saving mechanism frustrating to use compared to vim's as an entry level user, and now as a mid-skilled user I dislike how featureless nano is - when I was first learning how to use the terminal I hated having to edit anything as I was pretty much force-fed nano with no alternative provided, but on finding vim and remembering literally 3 things (:w, :q and i) everything became so much easier, but I definitely do have an extra bitter taste left about not being told about something much easier to use which irked me when I saw someone preaching how amazing nano is

I also really don't get the hate for vim when remembering 3 things gives you as much/more functionality as nano and is a starting point for so much more functionality - intuitive doesn't mean featureless and don't try and pretend nano's shortcuts are the same as 99% of other editors (text or otherwise), in fact they're totally different, making it less intuitive

Nano is perfectly fine for me.

But I know the basics of vim if I need to use it.

I have a cheatsheet of all the necessary vim shortcuts!

:q!

:q looks like a person which jaw hit the desk. Which adequately described me when I found out how to exit vim.

I refuse to see how vim and emacs is worth learning.

Interesting choice of words. You aren't unable to see...you refuse to. Why would you refuse knowledge?

Because I've followed tutorials and watched plenty of videos on vim and it's not worth the steep learning curve compared to the gui text editors I'm familiar with.

25 more...

Stop showing off VIM to your wife would be a good start. I mean, I would do the same if she tried to show off her make tutorials to me.

Make? As in Makefiles or make-up?

Makefile obviously. What the heck is a "make-up"?

make up is my build command for pushing to prod

1 more...
1 more...

You know what, that was mistype, but I'm not going to correct it since it fits better in this sub Lol

1 more...
1 more...

Maybe she's into VSCode guys. So try VSCode with vim plugin.

Divorce.

Vidorce.

:q!

Still some paperwork in a divorce so you’d probably want :wq!

Just edit the divorce documents in vim and you'll be fine

To divorce their imaginary wife, they would need to go to a mental health clinic, which means going outside; and might EVEN, dare I say, TOUCH GRASS!

Redditors don't do that.

$ touch grass
$

Now what?

Redditors something something

I think you might be lost.

Realising that your partner doesn't care about you after 10+ years can indeed be hard.

Guy shoulda tried emacs instead, wife is probably an elitist

Have you tried tiny macros with q and @? Syntax highlighting? Z-folds? Or turn vi into a hex editor with :%!xxd ?

If that doesn't work, try :divorce

Look, some of us old farts started on Linux back before nano was included by default, and your options for text editing on the command line were either:

  1. vi/vim, a perfectly competent text editor with arcane and unintuitive key combos for commands
  2. emacs, a ludicrously overcomplicated kitchen-sink program that had reasonable text-editing functionality wedged in between the universal woodchuck remote control and the birdcall translation system

Given those options, most of us chose to learn how to key-chord our way around vim, and old habits die hard.

Would've loved to see which community they posted to. RelationshipAdvice?

sit your wife down in front of vim, and make her use it.

It'll make more sense immediately.

If not, divorce.

Divorce

Makes sense: Even a marriage is easier to exit than Vim

I just dipped my feet in Vim yesterday, I found it not intuitive at all. :wq! To exit a read only file? I’m too dumb to think of syntax like that!

: is your commandline, it does a lot of actions. w is write, q is quit. So you're doing a write quit, the ! just tells it to fuck off and do the fucking command essentially.

If you open a read only file, and you need to quit just hit it with the :q! or if you haven't made any changes, :q will work just fine.

naturally, as one would expect, you can hit all of these independently. :w just writes changes, :q will close as aforementioned.

Show her you know how to exit vim and she'll instantly be naked and on the bed

You might've moved around too quickly. Stick to motion in the home row to start - hjkl. There are several ways to enter insert mode but DO NOT attempt it before she's familiar with the basic motions.

Deep down, every Vim user just wants one person to tell them that the countless hours they spent leaning to use it weren't a total waste of time.

My wife's impressed though, may be a little...

But she's also a programmer.

Have you tried rebooting her?

it might take ages for her to choose the right boots for rebooting ;-)

I'm sorry, you need to :s/replace/her/ as soon as possible.

make several limes with the number 0
visual mode mark them and do g ctrl a

gets 'em every time!

if your wife wasn't vi-impressed, maybe she already is vi-improved ;-)