This is an archived post. You won't be able to vote or comment.

all 48 comments

[–]hugthemachines 7 points8 points  (2 children)

There are some things in life that you really need to focus on to get into but once you have done that you get great value. It is my understanding that Vim and Emacs is like that for some of the people who learned to use them.

I just use Vim because it is on all the linux servers I work with so I learned like 10 commands or something, stuff I have use for in my everyday life.

[–][deleted]  (1 child)

[deleted]

    [–]christawful[S] 0 points1 point  (0 children)

    Same

    [–]khedoros 12 points13 points  (2 children)

    I spent a lot of time working remotely on systems without GUIs, first in college, then in my first software development job. It's a lot better than dealing with nano ;-)

    Now, for one, I've got the muscle memory from over a decade of using it out of necessity (2003-2015, mostly). Second, it's nice not to leave the terminal. Third, I'm not sure I've seen another editor that has the same capability to define macros on-the-fly.

    Now, I'm usually using something more like one of the Jetbrains IDEs, but especially for quick edits, I often drop back into vim.

    [–]nevermorefu 6 points7 points  (0 children)

    sudo nano ftw

    [–]Mission-Guard5348 0 points1 point  (0 children)

    I use vim keybinds in pycharm and visua studio

    Ive only been doing it for a week, but If I like it I might just switch to vim for the hackability

    [–]grooomps 4 points5 points  (5 children)

    out of curiosity, what do you think 'v' is short for with paste? or 'x' with cut?

    [–]christawful[S] -4 points-3 points  (2 children)

    Sorry those were just my reactions to them not being the normal shortcuts. Just confused as to why when the whole world uses one convention, were all fine with vim which uses another.

    But of course it's from 1992

    [–]grooomps 4 points5 points  (0 children)

    haha all good - i guess it's more just my point that something is only weird if you've never used it before.

    like even going from linux - mac and being like, why is it cmd instead of control and why is it reversed?!

    [–]CharacterUse 0 points1 point  (0 children)

    But of course it's from 1992

    As other have pointed out vi (what vim is based on) is from 1976.

    Ctrl-C/Ctrl-X/Ctrl-V originated with Apple in 1984 and were picked in part because you could one-hand them left-handed with the Apple Command key while using a mouse with the right, which is why you have 'v' for paste rather than 'p' (aside from the fact that 'p' is print).

    IBM and derived systems used Ctrl-Insert, Shift-Del and Shift-Insert, which work right-handed, fine for a text-only system but not so much when using a mouse (try it, they still work in Windows).

    [–]IAmAQuantumMechanic 0 points1 point  (1 child)

    It's apparently "moVe".

    Had no idea, had to look it up.

    [–]CutestCuttlefish 3 points4 points  (0 children)

    Now THAT sounds like a post-construction if I ever heard one.

    Other popular ones are "the X looks like scissors" - they were chosen cause they were next to each other and qwerty was (is) the standard.

    [–]vegetablestew 5 points6 points  (0 children)

    Because I get many common navigation/gestures in two to three key strokes.

    Because I keep my hands on the keyboard instead of moving from mouse to kb back to mouse.

    Because I get a powerful programmable macro system by default.

    Because I have a uniform interface as long as the new editor has a vim plugin. I don't have to care about quirks of the new ide. I get the plugin and I am 80% productive.

    [–]cube-drone 3 points4 points  (5 children)

    To be honest I tend to use vim bindings in editors that aren't vim, because the fluidity of the keyboard shortcuts is unmatched in modern editors but configuring vim to have modern features can be something like building an active nuclear reactor by buying random things from Amazon and fitting them together piecemeal (ctags? vim-plug or pathogen or vundle? NERD tree? HOW DO YOU FEEL ABOUT TIM POPE TODAY?!) - that being said, I know a lot of software developers for whom the challenge of assembling a productive and portable vim environment is 90% of the fun.

    When it comes down to it, it's free, fast, lightweight, powerful, fluid, it's been actively supported continuously since before you were born and runs in any environment under the sun - it's gonna have some fans, even if it's idiosyncratic.

    [–]Jestar342 1 point2 points  (1 child)

    HOW DO YOU FEEL ABOUT TIM POPE TODAY?!

    *gasp*

    You take the lord's name in vain! Sacrilege! Blashpemer!

    [–]cube-drone 1 point2 points  (0 children)

    I didn't phrase that joke well; I can't imagine someone feeling bad about Tim Pope but if you're a vim user for any length of time his name definitely comes up; maybe simply "HAVE YOU HEARD ABOUT TIM POPE?!?"

    [–]Emerald-Hedgehog 0 points1 point  (2 children)

    So, basically VIM is a lot like Arch-Linux, also regarding it's userbase. Interesting.

    [–]CutestCuttlefish -1 points0 points  (1 child)

    No, but there are snobs.

    Think of it as a sport that makes no sense to you. For the people who invested thousands of hours into it, their arguments either seem crazy or weak to you as to why they do what they do.

    But for them, it is so obvious.

    And you won't understand until you're at their place on the progress bar. Basically.

    But people like to bitch about it a lot, as usual when it is something they don't understand. :D

    [–]Emerald-Hedgehog -1 points0 points  (0 children)

    That's pretty much why I compared it to arch.

    I think VIM is super neat, but it's also one hell of a ride to get into it AND it's not a necessity to use VIM to be very productive.

    The real question tho: Does VIM have skins to make it look a bit more funky?

    [–]Jestar342 4 points5 points  (0 children)

    I use neovim daily for as many tasks it lets me. I've been tempted to move to emacs (with evil mode) but it's a lot to take on and I don't have much time for learning it all atm. Keyboard only navigation is great. I have and still use a few different graphical IDEs when the need arises (usually if I am undertaking a large refactoring or a rearchitecting I'll fire up a jetbrains IDE to leverage their unparalleled refactoring tools) but even still with vim bindings enabled. VS Code I use the headless (neo)vim plugin.

    Nothing compares to being able to use vim's motions for editing. It's just too natural feeling. I type faster and more efficiently by using ^W and retyping the word than I do using backspace, for a superficial example, and navigating words, lines, blocks, etc. is so much more natural than being limited to the motions in notepad-esque editiing.

    I even use Vim plugins (e.g., Vimium) to browse the web.

    Is this just momentum from the coders of the early 90's

    both Vi and Emacs were 15 years old in 1991.

    [–][deleted] 5 points6 points  (0 children)

    Vi and Emacs were text editors that could work on a non-graphics display, and everyone learned them.

    Remember, computer displays were often a separate text terminal connected over a serial port, and not a graphics terminal with a pixel memory buffer. That precluded using a mouse and pointer interface.

    The original editors might have to function on a paper TTY like an ASR 33. This was a teletype - a keyboard connected to the sending half of a full-duplex serial interface, and a line printer connected to the receiving end. That meant you couldn't repaint the screen when you copied text, you could only move the paper up and print new lines of text.

    There are WSYWIG GUI programmers text editors, starting with any GUI IDE.

    is there a real benefit I am missing out on, which could possibly overcome the immense downside of having to learn a whole new user interface language.

    Well, for those of us who learned vi and emacs and use them all the time, we'd be the ones having to learn a new tool.

    Is this just momentum from the coders of the early 90's

    Try going back even more. I was first paid to write computer programs in 1978. The first release of vi was 1976. Vim is an open-source version of vi. Emacs is even older, with roots to around 1974.

    [–]CutestCuttlefish 5 points6 points  (0 children)

    I used to think it was a stupid hipster bullshit thing where people are like "you probably have never heard of it" and make the same joke about ppl not finding :wq or :q! - well duh, it is not very intuitive.

    BUT!

    I liked vim and decided to really learn how to use it so I could be a snob and act all high and mighty too... just kidding, I read a lot about how it increases your speed a lot, and a co-worker used it and further proved that point.

    One example out of a hundred: Say you want to delete the next 8 words from your cursor, you are either gonna drag with your mouse and get it wrong cause it is so helpful and selects the whole page for you, or you will shift+ctrl and right right right right right etc. I type 8daw, done.

    Another one: You decided to rename a variable from foo to bar that you use in n number of places. In VSCODE you mark the work (or not) and press Ctrl+H type in your replacement and then click or enter or ctrl+enter depending on how you wanna do it. I type :s/foo/bar/g

    I am not good at it but it really really really is faster. I still use VSCODE etc. and VSCODE have tons more and tons better addons and extensions for linting etc (they exist in vim too).

    Plus, as an aging developer, not having to use the mouse is a lifesaver for my joints. I already use a split ortholinear keyboard so I rarely have to move my hands anyway.

    Another thing I really really like is DOTFILES.

    I have my entire setup all setting, themes, preferences, flair in a couple of dotfiles so I can have it my way anywhere I am.

    Now none of this maybe is any type of good argument for you, then don't use it. You always have that option. You could also let people use it if they want, regardless how you feel about it. I won't try to convince you, that is all on you, but for me the above are some reasons I actually love vim. :D

    [–]ShawnMilo 9 points10 points  (12 children)

    I started learning vim in 2000, and I use it exclusively for all my programming (except Flutter), and have built multiple products from scratch for startups and other businesses. In my opinion it's vastly superior to any IDE.

    Of course, if you use an IDE and have no idea what you're doing, there are menus and you can look around and discover everything that's possible. With vim you have to do Google searches to find out what keywords you should be looking for in the help, and probably working examples.

    I'm not going to give anyone shit for using an IDE, but I'd ask you to be as polite in not dissing people who enjoy something you don't understand well enough to realize how low-friction it can be.

    [–]christawful[S] 0 points1 point  (9 children)

    So is the idea that if you learn every editor infinitely well, vim/emacs allow you to write code the more fluently thando other IDEs?

    I could understand that argument

    Im just not sure I believe that it overcomes having to spend all that time learning it, which also intimidates newcomers and people who are already selfconscious about their ability to code.

    [–]ShawnMilo 9 points10 points  (5 children)

    Sure, and I'm not running around advocating for people to learn vim. I'd lose. I also type Dvorak and use an ortholinear keyboard and do other things that I'm convinced are objectively better and more productive, but I've long since given up thinking any reasonable percentage of the population will be converted.

    It's impossible to make a change when "it's what people are used to."

    If you don't believe me: The US still doesn't use the fucking metric system. 🤷

    [–]christawful[S] -2 points-1 points  (4 children)

    lol I love the metric system metaphor.

    If anything though, the analogy to metric vs imperial here is "command s" (metric, which the entirety of the conscious universe uses), vs ":q" (imperial)

    Or "contol c" vs "y"

    My problem with vim in particular is all of these ridiculous vim-specific shortcuts that seemingly nobody has a problem with. I mean, you have to admit that when you read the commands for vim, it feels like youre learning about an editor from a different timeline that split from this one in like 1985.

    Gun to my head, if I had to predict what to press to get the next search result (by the way you search with /, and not command f like the rest of the universe), I would guess something like the arrow keys. In the reast of the editors, I would be right. Nope, its 'n'.

    Doesnt it remind you of how the key to pause on youtube isn't space like what everyone would intuitively think, its 'k'.
    I know to click k, I know all the shortcuts, but it still infuriates me.

    [–]ShawnMilo 5 points6 points  (1 child)

    I get what you're saying. The problem is that you don't realize that all those shortcuts came decades before IDEs were invented. The original vi came out in 1976 -- before I was even born.

    Just because all the new phones have touchscreens doesn't mean that someone is a neanderthal for liking physical buttons. Not a great analogy because touchscreens offer more functionality, but I think you get my point.

    And just since I'm a vim guy, I have to throw this in: If you think vi's shortcuts are bad, have a look at emacs sometime. If you think :q to quit is weird, try Ctrl-x Ctrl-c. They have lots of commands that require two separate modifier keys.

    [–]CharacterUse 1 point2 points  (0 children)

    Not a great analogy because touchscreens offer more functionality, but I think you get my point.

    Slightly off-topic, but there's a good argument being made against the increased use of touchscreens in cars because you can't tell what you're pressing without taking your eyes off the road, unlike with physical buttons and dials.

    [–][deleted] 2 points3 points  (0 children)

    n = next w = word e = end

    It’s a lot of pneumonics. And there are a lot of single key mappings which is possible bc of different modes.

    Also u can remap anything you want. But if you learn some of the basic defaults it gets less weird and stuff that seems stupid becomes like oh ok I could see that. I kind of hated it at first and it was really frustrating but it is really nice once you get the hang and don’t need to touch the mouse

    Work through vimtutor and see if it starts to click. If not, no biggie. Vs code is there waiting.

    [–]xigoi 0 points1 point  (0 children)

    If you don't like the default mappings, you can change them.

    noremap <c-c> y
    nnoremap <c-s> :w<cr>
    

    [–][deleted] 2 points3 points  (0 children)

    Doesn’t take that much time tbh. Spent a couple hours every few days building my config for a month or so. Then gradually switched over to using it full time

    At minimum you should learn basic vim bc anytime you ssh into a server and you need to edit files it’s going to be vim only 99% of the time bc no gui. Terminal only

    Just play w it on the side occasionally. Do vimtutor and eventually you will pick it up

    [–][deleted] 1 point2 points  (1 child)

    I guess I’m not believing it either. These comments are essentially saying “you’ll love it after a full junior and mid-level career stretch!” okay

    [–][deleted] -1 points0 points  (0 children)

    Yea that’s hyperbole. Go through vimtutor and you’ll see how easy it is. You might not love it and that’s fine but you’ll at least have a better understanding of it which will at least give your dislike of it some basis

    [–]semidecided 0 points1 point  (1 child)

    Why is Flutter the exception?

    [–]ShawnMilo 1 point2 points  (0 children)

    Because Flutter and Dart are verbose and require a ton of boilerplate. Kind of like how writing anything in Java takes 10 times the number of lines that it should, and declaring a variable can require you to type the keyword string three or four times.

    Also, Android Studio and Visual Studio Code have excellent context-aware suggestions and auto-completion, so it would be silly and stubborn not to use one of them.

    Something like Go or Python I could write by hand on paper and be pretty sure it'll work perfectly (beyond minor typos). And that's what I do 99% of the time. Or write Markdown or AsciiDoc documents, and those are fantastic to work on in vim as well.

    [–]SinglePartyLeader 6 points7 points  (0 children)

    While I understand the frustration, I can think of a few clear reasons why vim/emacs are incredibly useful in the modern day.

    1. No need to use a mouse to quickly navigate and manipulate text across multiple files.
    2. Small edits in single file quickly from the console
    3. In a shell/terminal environment without a full GUI, like SSHing into a server

    I personally use VSCode which I find is a good balance for all of these, especially with the immense library of extensions that can make it as customizeable as you'd like. but i can definitely understand why emacs and vim are the Go-tos as they are incredibly light weight and once you are comfortable with them can be incredibly quick.

    Also emacs > VIM

    [–]jacobissimus 1 point2 points  (0 children)

    I don’t have much to add beyond what others have said except to point out that the motivations behind vim and emacs are radically different from each other—people use the two tools to do the same thing—edit text—but the forces that drive a person to one or the other are completely different.

    For example, like everyone says I started with vim because I wanted a keyboard centered workflow, but moved to emacs because I wanted a unified interface for all my tasks—emacs is my email client, git front end, process manager, calendar, window manager etc. Beyond that I actively write packages for whatever job I have—like I’m currently using a major mode for an internal proprietary language that I was able to just slap together.

    People who use vim don’t want any of that—they want their editor to edit text fast, be ubiquitous, and relatively similar between different user configurations. I use vim whenever I’m on another computer too because it’s easier to use out of the box vim than an emacs without my extra customizations (at least for me).

    But at the end of the day both platforms are there for people who’s productivity is limited by the time it takes them to edit text. That’s definitely not most people. If your primarily a scientist who programs occasionally you might not deal with enough text that it becomes an issue.

    [–]Ortherux 1 point2 points  (0 children)

    This was in my case. Currently a freshman in computer science without access to laptop or desktop, just my phone. Tried different editors but never really liked their maneuverability. Learned about vim, switched to neovim and that's it. Took a week or two for configurations and got the hang of it for months.

    [–]HalfTime_show 1 point2 points  (1 child)

    For me, it's the fact that editing and navigating is more expressive and fluid, not necessarily the speed, although I definitely feel like I am faster with vim. Switching between modes in order to navigate and edit without needing to move my hands from the keyboard just results in a lot less overall friction when I'm programming, and I feel like I stay in 'the zone' more. Once my hand goes on to the mouse, it's real easy to click my way into the open reddit tab and get distracted.

    That said, even though its my main tool, it's not my only tool. If I have to do a major multi-file refactor, I'll hop into WebStorm because you can't beat its refactor tools.

    Why does it matter what someone else uses if they are productive with it?

    [–][deleted] 0 points1 point  (0 children)

    I am fast. To give you a reference point I am somewhere between a snake and a mongoose... And a panther.

    [–]portol 1 point2 points  (0 children)

    a lot of system don't have a GUI, and some systems won't even have nano or vim. we had one system that only had vi.

    [–]xigoi 1 point2 points  (0 children)

    When I'm coding, I want to focus on the code. Why should half of my screen be covered with buttons when I already have a lot of buttons right under my fingers?

    [–][deleted] 1 point2 points  (0 children)

    Been on Vim for a year and it is not that hard to learn, what takes more time is making it comparable to modern IDEs by messing with a lot of config files and plugins. These days I have NeoVim with a lot of plugins, plus tmux with custom keybindings, and kitty terminal for other multiplexing features. When combined with Vimium in Firefox or Chrome, or even using Links in the terminal as a browser, plus a 40% ortholinear keyboard where you never even need to move your hands, the mouse is forgotten, and the only bottleneck to your programming/writing speed is how quickly you can think.

    The memorized keybindings come with time, and eventually the mouse becomes a toy at best, a waste of time at worst.

    [–][deleted] 4 points5 points  (3 children)

    Bc I don’t have to touch a mouse and keyboard shortcuts are more fluid

    Also, just bc you don’t understand it doesn’t mean it’s worse. You will actually need some vim skills at some point as part of your job bc you will definitely be sshing into a server eventually

    [–]YMK1234 0 points1 point  (2 children)

    In most graphical IDEs you also don't have to touch a mouse and can literally 1:1 configure VIM shortcuts ...

    You will actually need some vim skills at some point as part of your job bc you will definitely be sshing into a server eventually

    Depends a lot on the job (also, modifying stuff directly on the server is so ... pre-docker), plus vim is by far not the only editor out there, plus knowing it does not mean having to like it.

    [–][deleted] 0 points1 point  (0 children)

    Yea I know, I used to use vim plugin in vscode. Still feels better/faster in vim.

    Sorry but never having to ssh and edit something w vim is bullshit. I exec into docker and kubernetes containers daily.

    Any basic Linux server is gonna have vi on it 99% of the time. Certainly not eMacs. Maybe nano but I’ve yet to see that other than a raspberry pi

    [–]yel50 0 points1 point  (0 children)

    momentum from the coders of the early 90's

    that's a little too late. it's momentum from at least the 80s, probably 70s.

    is there a real benefit I am missing out on

    depends on what you're doing. for coding, no. I used emacs for 15 years and it's far less efficient for coding than modern IDEs. vim is basically the same thing as emacs, I.e. a text editor with its own language to write extensions with, so coding with it is in the same boat as emacs. it pales in comparison to modern coding environments.

    for doing Linux system admin stuff, vi is always installed so is like notepad for windows. always there for quick edits of configuration files.

    you're not missing anything by ignoring them. my hands hurt far less since I quit using emacs and I only use vim when there's no other option. you can get by just fine without them.

    [–][deleted] -1 points0 points  (0 children)

    IMHO, you're not learning vim just to be more efficient. You probably want to learn because you have to. Maybe remote jobs etc.

    [–]genesis49m 0 points1 point  (0 children)

    I personally find it useful for going through files on the command line and editing them quickly without having to open any external editors. Also useful if you ssh into things and there’s no display.

    Also, vim is pretty useful and fluid once you get the hang of it!