Selling vim (or emacs) to kids

There is this strange vibe around beginner programmers or even older programmers that pick up Linux and the Linux environment in general, to think that restricting themselves to VT100 terminals is pure gold, and they should stick to that for as long as they should live. This sort of elitism is the usual driver behind people dropping Linux and jump back to using Macs and Windows desktops.

There is no real reason to resort to this sort of painful penitence, but people will occasionally convert a gifted young adult to this sort of crap, in the name of all that’s good and pure (their egos, that is). But there’s really no point in restricting yourself to learning programming with vim, console tricks and gdb. So please, kids, stay in school, off dope and vim.

There is absolutely no reason to learn vim in this day and age. The most you should need to learn is how to quit and how to start editing for the occasional remote SSH connection. But very few people need to do that: only those that do heart surgery on servers need to really master this, because nowadays, with the internet connection we usually have, doing a remote desktop connection works just fine, as well as running X applications through SSH (as long as you’re running under an X server).

So why should people learn the complicated way of editing multiple files in a 80×25 grid? Why do some programmers insist on driving people nuts and recommend stone age tools? There is this growing elitism in people that is satisfied by doing something overly complicated without any real reason to do so. It’s like eating with a one-meter fork instead of the usual fork, just because you’re cool, with no real gain in food consumption or digestion. Sure, it helps you keep your diet, but you might as well throw that meter-long fork and go for an overly expensive one thinking that’s the only sane thing you can have (ie. Mac).

UNIX used to be the pinnacle of innovation for the users. Linux nowadays has the amazing possibility (amazing give its heritage) of not requiring a single second of console; and indeed, most main stream distributions try to do that for you. Ubuntu, Fedora, OpenSuSE, they all try their best so that you don’t need to fight with the black lacing of the scary terminal. In fact, if your work would ever require starting a terminal, the distributions already failed; unless, of course, your point is using the terminal, for running scripts that make your job faster than it would otherwise.

But to recommend nowadays vim as a programming environment is stupid elitism and megalomania. Yes, maybe you use it and yes, maybe you’re proficient in it, but why should anyone else suffer? Why learn a number of skills that offer no value? Why learn the intricate ways of vim, if you can do just fine with a normal editor, and you can do better than vim by using Microsoft’s Notepad, a program that was written by a programmer in his first morning of the year 1993, while trying to sober up after promising himself to learn Windows programming in the year to come.

Seriously, Notepad is way better than vim, and if you can use Notepad instead of vim you already have a gain in productivity. I’d recommend Notepad over vim anytime.

That’s why QtCreator is what I recommend when people ask “What tool/IDE/Compiler would you recommend for practicing programming (C++ as of now) for a beginner?“. QtCreator is cross-platform, but does well the job of an IDE, without the hassle of elitism being thrown in your face. You can always do things by hand, but if the IDE helps, why not take that? Why punish yourself?

Seriously, everyone, stop selling vim to kids. Emacs too. In the holy war between vi and emacs, Notepad++ won big time.

Comments

Selling vim (or emacs) to kids — 168 Comments

  1. I use Vim every day and I fail to see how Notepad would be better. Also, none of the servers I work with has X running (it would be dumb).

    • For a beginner? Definitely better, Notepad, that is.

      If you go and do stuff on the server, you already lost. 🙂 That means that you don’t really handle correctly things like upgrades, you don’t use some sort of package manager… That’s the wrong way to do software.

    • Really? “That’s the wrong way to do software?” How do you propose to have a fast server with only the minimum requirements installed and kept up to date? SSH with X is pretty slow and a little unsafe. And not everyone can go into the room with the server to do updates.

    • I’m talking about a package manager, a repository for delivering updates. 🙂 “The wrong way to do software” doesn’t refer to the no-X part.

    • All Linux Package Managers are command-line with file configurations. The GUI versions are just wrappers around the most common used options. For full power you still have to go to the terminal.

    • Really? I have yet to see such a maintainer which can solve every configuration problem using only the graphical tools. And I’m proud of knowing some good ones (in the ProLinux team)

    • For a beginner? Better at doing what?

      The wrong way to talk about the correct way of doing software is introducing gratuitous assumptions. There are other reasons why you’d want to edit a file on a server, other than deploying stuff. One example would be (drum roll) setting up the server.

    • Oh, thank you for sharing that marvel with me. Yeah, we use Vagrant, Puppet and we have our own apt repository. All of which use text files as configuration, which you have to write at least once. And yes, we have an operations team that deals with those.

      Also, I have my own network of virtual machines running on my workstation for my throwaway experiments. I cannot be bothered doing things “the right way” there. It would be an unjustifiable overhead. If I want to download a Wikipedia page into Vim (:r! curl -s http://www.wikipedia.org/), clean it up to a table I’m interested in (d with motion commands) and use macros to fashion it in SQL insert commands then I’ll do it and I won’t apologize for it.

  2. Haters gonna hate.

    I use Vim because of the power it gives me, power which I have yet to find in any other editor or IDE.

    And you don’t need to learn everything in Vim to use it, you can start with as little as knowing how to move around (which is a little less than Notepad’s power). As you do that you start learning more and more (if you’re that type of guy) and soon surpass any other IDE in power (due to muscle memory and such).

    • I’m not saying don’t use it. Use it if you feel like it. But be completely honest, and tell me how using vim brings any value to your programming skills? Because I bet it doesn’t (question for VOC as well)

    • The editor has nothing to do with anybody’s programming skills. I don’t think anybody ever made that claim.

    • Macros, reindenting the code, refactoring based on a pattern, man pages at a finger tip, documentation at another. Powerful code navigation (more powerful than in VS) using a properly set up cscope.

    • A smart IDE does all these in a very easy to control and self-explanatory interface. Vim’s interface is anything but self-explanatory.

    • When you open up vim with no file argument it prompts you to use vimtutor for a tutorial which is both self-explanatory and comprehensive. After doing the first 3 lessons you can leave it and start using Vim. 5 minutes at most is what it takes to get accustomed to it to use it as a beginner.

      Ease of control? Just a few keys to press and you are on a different mode. You want a fancy macro for adding Haskell signatures? You simply edit a file with that and that’s all. Far more controllable than an IDE.

    • There is and always will be a huge gap between a beginner and a pro. And the beginner will not close it if he stays on the commodity of IDEs, of unchallenged old thinking and so on.

    • No editor taught me C++, and I edited in vim, mcedit, nedit, xemacs, emacs, pico, notepad, notepad++, jedit, Eclipse, Netbeans, Visual Studio 5, 6, .NET, 2005, 2008, 2010, 2012, kate, gedit, and a few others I can’t name right now.

      I understand the point that an IDE helps, doesn’t limit you. vim does just the same. vim forces you within some confines of what it can do. Sure, it can be scripted to do a lot of things, and that’s great, but it doesn’t do that, it uses existing tools. The things you say vim does are done by external tools, like VOC’s example with curl.

      vim is not self-explanatory, and it’s not self-sufficient. It’s an obstacle towards doing the things it can do. I’m not saying it cannot do things even faster than other IDEs, just like it won’t be able to do completion like VS does, in a nice popup, and so on.

      Btw, kate has a kvim mode, that makes it work like vim. kate is integrated in kdevelop. You can check the ‘FakeVIM’ mode of QtCreator as well. This is the proper way to do things, not keep them tied to 80×25 just because VT100.

    • The things you say vim does are done by external tools, like VOC’s example with curl.

      Actually, curl was a small part of that. Yes, you could use a stream editor (like sed) to mimic what I do with Vim macros, but that would be *painful*. Also, that was only an example that does not capture the whole experience. There’s something to be said about thinking “hm, I want to delete down to that line on within those curly braces, or quotation marks” and have it happen almost automatically as you think it. And I’m not even talking about speed, I’m talking about comfort. It’s like having a good chair does not make you a better programmer, but it does help.

    • 1. Stop repeating the BS about 80×25. First, it should be 80×24 () and no terminal console now has those limits.

      2. Learning how to properly edit a file has nothing to do with learning a language. Don’t mix editors in learning a language.

      3. The fake vim modes are usable for learning. But you cannot rely on them being everywhere.

      4. vim is self-explanatory and more self-sufficient than an IDE. An IDE relies on external tools the same way as vim does but you don’t see that because it is hidden (meaning you have less control over things). Vim is more powerful due to the macros.

      5. VOC’s example used curl only in the beginning. Any IDE will have to download that file as well. Depends on what that file will be used for afterwards. You’ve completely missed that point.

      6. Vim doesn’t constrain you inside any confines. Please, read the vim-creep article.

    • QtCreator gives you a console window. You can span many more console windows as well, in IDE or outside of it. You can run all these tools AND use the power of an IDE.

      We compare apples and oranges unless you’re saying that vim has all these tools integrated.

    • Those console windows are managed by QtCreator thus they live in the same process space as it 😛 And I doubt you can use one of those consoles to attach to a running program or to debug and switch between threads or even kernel code.

    • You’re not really convincing me that there’s a reason to not run an IDE. Those consoles are running /bin/bash, you can do whatever you want to do with them. Including running vim, if that’s what you want.

      How does C++ intellisense work in vim? 😀

    • Also, show me a step-by-step guide with how you’re going to use QtCreator to:

      1. solve a missing symbol in one binary which you have to link to your application but you don’t have the source
      2. debug a multithreaded application in which you control/don’t control the scheduling of threads inside the debugger
      3. debug a kernel code invocation
      4. attach to a running process.

      If you can do 2 out of 4 (5) I might give it a chance.

    • So you’ll need _both_ an IDE and a terminal? Why use 2 tools when you can use a single one? (How ironic that this is exactly what the IDE-affictionados use to promote IDEs)

    • If you really want, you can. 8-| As I said, a console doing /bin/bash runs in the QtCreator as well, and you can do whatever you like in it, I think you can span multiple consoles. You can even span a vim instance, if you feel like it. The IDE also offers a VIM mode, in which you can do all the magic you want. Your point? If your point is ‘just trolling’, I’ll be very upset.

    • Try it for all of the 5 things above and give back your impressions in the next 5 articles (I think you’ll need this space). I doubt you’ll open QtCreator to attach to a running process (for example).

      It’s not trolling if commenting on a trolling attempt 😛

    • I fail to see how some command-line tools can match the productivity and developing/debugging speed of using an IDE. You can’t just compare them IMHO.

    • No, we’re (I’m) not 🙂

      It’s not elitism in knowing those tools which are available everywhere and which you can use to debug remote machines, kernel and userspace processes and so on. It’s not elitism, it is the comfort of knowing tools that excel at their jobs.

      And I doubt people turn away from Linux just because some experienced sysadmins and programmers prefer to use terminal apps and vim/emacs. If that was the case we would have had only xmonad, i3, awesome and so on as window managers (if any).

    • No, I’m saying that beginners are told to edit things by hand (when proper UI alternatives exist and are really suggested as the main way to do things by the distributors), I’m saying that it’s wasted time to first learn vim when you want to learn programming, and yes, people going head first with vim are highly likely to quit using them, and switch to Xcode.

      The elitism is in creating a false barrier for beginner users. If you recommend vim first, you are doing just that. It’s a useless barrier, and one can live very well without it, but the elitist bunch push that as a ‘must-pass’ that really has no sense in the real world.

    • They’re not told to edit things by hand. The best tutorials suggest at most “Open this file with your favorite editor” though the majority of them prefer to simply state “enter this code in there”. Please point to a good-or-better tutorial which shoves vim/emacs on the face of the newb wanting to learn how to code.

      Please point me to a distributor which suggests using an UI alternative and that suggestion is not for marketing purposes.

      As a matter of fact, I have seen quite a large number of students, both in Romania and in US which learn programming in any editor/IDE they want and _then_ switch to vim/emacs to be more efficient and pro.

    • Then you obviously didn’t read my article. I was complaining about people recommending beginners to start programming using vim and console.

    • And while your intention might have been to complain about that, that is only a _minor_ point of your entire bashing of vim/emacs and console.

    • We have attacked all of the points you’ve made safe the one concerning newbies in programming being forced (by whom? — that was attacked) to use vim/console. Because that is the only valid point of the article even though it is so hidden inside bad mouthing and BS (sorry).

    • Doesn’t need to be a teacher. Any good tutorial/resource will not force you to use a specific editor. My point from an hour or so ago.

    • I don’t program in a VT100 terminal and I don’t know anybody who does, or who thinks that would be “pure gold”.

      I use gvim (with toolbar, scrollbars etc hidden), and occasionally I use vim in a terminal emulator.

      My gvim window shows 80 columns and 60 lines. I don’t limit lines to 80 characters because of “elitism”, but because I think it’s a sane limit. There’s a reason you have columns in the newspaper. Long lines are hard to follow. It also helps as a reminder to keep cyclomatic complexity down (yes, I know there are tools to measure it after the fact).

    • gvim is a wrapper to vim 8-| They are not shipped as the same program, there’s no “alias gvim=vim” anywhere on my machine. gvim is a wrapper. I’m talking about vim. 8-|

      FakeVIM is there, it’s open source, and it waits for your contributions, if something is missing. But I guess you didn’t even try it?

    • gvim is vim with some features compiled in. It’s not a wrapper, it shares the same code. Instead of starting “gvim” you can start “vim -g”. It’s the same thing.

      Also, the way I use it you’d be hard pressed to see much difference between my gvim and vim. I don’t use any gvim features that are not present in vim. The only difference (and the reason why I use it) is the color scheme. gvim can display prettier colors than the terminal.

    • «
      $ man gvim | head
      VIM(1) General Commands Manual VIM(1)

      NAME
      vim – Vi IMproved, a programmers text editor
      »

      Nothing more needed to say here.

      Being shipped as the same _product_ (I haven’t said the same _program_ which you used to justify the missing link/alias) is not the same as there being an alias from one to another.

      I’ve tried fakeVim and I hated it. tried it in kate, in LightTable, in Anjuta, in Geany and in Sublime. All of those are things which cannot exist on all machines I might have to work on so there was really no point in spending quite a huge amount of time in trying to make those fakes resemble more the real thing.

    • Ok, so vim is gvim, or the other way around. Again, what’s the point? Vim is better than any other editor out there, it’s an IDE without being an IDE but it is one. Ok. What’s your point. How many chicks in the first year of college would pick up vim and be happy about it? To be sexist as well as editor-ist.

    • My gvim: http://i.imgur.com/HYf2snh.png

      Like I said, for any practical purpose it’s the exact same as the terminal Vim. 😀 There is zero difference other than the colors. And if I wasn’t so lazy I could configure the terminal to show more colors, but there’s no point.

    • «How many chicks in the first year of college would pick up vim and be happy about it?»

      Last year of teaching in Ro: 14 out of 15 in my class. And they weren’t forced to do this. vim was only given as additional resources, no lab enforced you to do things in vim.

      Link:

    • Oh, but I wasn’t always an expert in Vim. One thing I can tell you though, when I picked it up it was immediately more useful than Notepad. And it took maybe a couple of weeks to become more useful than the likes of Notepad++ (for the record, I was using jEdit at the time).

      You’re not only talking about beginners. You also make broad statements like “There is absolutely no reason to learn vim in this day and age.”

    • > There is absolutely no reason to learn vim in this day and age.

      So, you want noobs to become experts doing expert stuff, or not ?

    • Definitely not the first thing when they start learning. Sure, some people might live with vim, and it’s the tool of trade, and that’s fine. It can be a good recommendation as well ‘learn vim, it’s nice and it can help you do this and that and everything you want’.

      But there is absolutely nothing that vim can do that other things are not able to do. Sure, they might not do it in the same window, and sure, you might not be able to do it like vim does, but vim cannot do stuff like other editors, or else we wouldn’t have this discussion.

      vim is good at some things, but most of those things tend to be a modus operandi that revolve around vim. If you didn’t know that vim existed, there would be another editor, and quirks done to copy content from running the things that vim does in the context of your document.

      there’s little that vim can really do. It does a nice job running other stuff, it integrates sed nicely… but that doesn’t mean it’s irreplaceable, with nicer tools (including bash).

    • Vim does more tools that any other editor around. Some of them are done via external tools (like any IDE does with debugging, running programs, source control, etc) but more things are done internally via macros. The vim macros are only matched in power by lisp ones (thus emacs’).

      You might want to watch http://www.youtube.com/watch?v=HoZ2CZWN3i8

    • Pointing the BS out and commenting on how this is BS and doesn’t only refer to newbies in programming being forced to use vim:

      «There is this strange vibe around older programmers that pick up Linux and the Linux environment in general, to think that restricting themselves to VT100 terminals is pure gold, and they should stick to that for as long as they should live.» — there’s no more VT100, everything is emulated. There’s no hint in this for newbies being forced to use vim/emacs and terminal.

      «There is no real reason to resort to this sort of painful penitence,» — way to generic to be considered as being only related to newbies

      «this sort of crap, in the name of all that’s good and pure (their egos, that is).» — realy? now it is crap but later in comment it’s not if one is a pro?

      «There is absolutely no reason to learn vim in this day and age.» — waaaay too generic

      «So why should people learn the complicated way of editing multiple files in a 80×25 grid? Why do some programmers insist on driving people nuts and recommend stone age tools?» — ignoring the BS of the 80×24! grid, I have yet to see a _good_ programmer/sysadmin insisting that everyone and their mother should use only console tools

      «Linux nowadays has the amazing possibility (amazing give its heritage) of not requiring a single second of console; » — for newbies yes. Turn to more advanced things and you’d love having a console there

      «you don’t need to fight with the black lacing of the scary terminal. In fact, if your work would ever require starting a terminal, the distributions already failed; » — How is that applicable to newbies in programming? When even QtCreator opens consoles?

      «But to recommend nowadays vim as a programming environment is stupid elitism and megalomania. » — Recommend it for profficient development. Not for newbies. But you missed that point (as many others in the comments)

      «Why learn a number of skills that offer no value? Why learn the intricate ways of vim, if you can do just fine with a normal editor, and you can do better than vim by using Microsoft’s Notepad, a program that was written by a programmer in his first morning of the year 1993, while trying to sober up after promising himself to learn Windows programming in the year to come.» — no comment here. Just pure BS and maybe some FUD.

      «Seriously, Notepad is way better than vim, and if you can use Notepad instead of vim you already have a gain in productivity. I’d recommend Notepad over vim anytime.» — read the above

      «In the holy war between vi and emacs, Notepad++ won big time.» — same.

    • I will return to answer this valid concern, as well as cmatei’s in a different blog post. The comments here started to be a flamewar. If there are other points to be made, make them here as a comment, and I’ll address them as well.

      It’ll probably be published in one or two days, and we can continue the discussion there. I will address experts there, just to be clear.

  3. “Tell beginners that they need to learn emacs or vim and you’ve successfully vaccinated them against Linux.”

    Too bad there’s no standard “sane shortcuts” editor for linux console (TTBOMK of course).

  4. Let me say my story too, can I?

    OK. Although I’m an engineer specialized in electronics, sometimes I have to write also the firmware for the boards that I develop. My usual setup under Windows consists in a custom IDE for the microcontrollers I use and one of the best editors: CodeWright.

    During the time I got so used with the productivity that CodeWright gave me, that it’s simply impossible to think of a better editor. However, at one time I had to use the same stuff under Linux (I use openSuSE at home, if that matters). While the IDE intalled under wine without problems, CodeWright did not. I started to look for something alike.

    This is the point where I was stunned to see how bad the editors look like in linux and how painfully slow it is to learn them, which is kind of a pitty. vim was simply out of the question for two main reasons:
    1. it has a steep learning curve;
    2. it’s ugly as fuck.

    All I wanted was an editor with column selection, jump to definition (and back), code folding, autocomplete (variables and keywords) and customizable code snippets. I only found it after some thirty editors tried and abandoned.

    So, linux people, having something to do the job is not enough. It has to look pretty and be easy to use, because that’s what users expect. I want to use it, not to waste time with editing stupid conf files just to try getting the system up and running.

    • That’s also pretty much my point. Vim does look pretty to me (it’s just text after all) and it surpasses anything else in terms of ease of use. It’s so easy to use that it feels like an extension of my brain sometimes.

    • Each and everybody of us has its own preferences. vim is for me the worst case scenario. I actually used it some years ago when my X configuration died and I had time to learn how to fix it from console. Would I do that again? No. Let me think a bit… No way.

    • It’s like learning to drive a car. It can be intimidating at first, but it can be damn useful and empowering. After a while you don’t even notice you’re doing it. It becomes like walking. Kinda like when I’m using Vim text just seems to change in front of my eyes. Sometimes huge changes is a couple of seconds. And again, it’s not about speed for me, it’s about comfort.

      Yes, learning to drive a car can easily take a month, as can learning Vim. It took me about three weeks, practicing about an hour a day. But that’s just 20 hours in 10+ years. It wasn’t such a bad investment for me at all.

    • I’ll say it for the third time: for me Vim is not about speed, it’s about comfort. I’d bet my neck that someone who’s sufficiently competent in both Vim and CUA editors would find the simple act of editing text in Vim much more comfortable and enjoyable. Editing in Vim is not a rush, it’s Zen. And it’s not Zen in the sense that’s minimalistic (it really isn’t; it’s probably more complex than Notepad++ and Geany combined) or that it’s older than the mountains. I’m talking about the connection you feel with a well crafted tool. It’s like eating food with chopsticks. It sounds like such a hipster thing to do, right? It’s relatively hard to pick up at first and you just know it’s going to be inefficient. Heck, it would even require you to make adjustments in the way you cook your food. But if you do become competent in using chopsticks you will learn that there’s something about them that is hard to put in words.

    • Let’s see:

      column selection: check (shift-V),
      jump to definition (and back): check (cscope,ctags, ^O),
      code folding: check (user defined, syntax, manual folds),
      autocomplete (variables and keywords): check (omnicomplete) and
      customizable code snippets: please explain what you mean by that, I think that this is also a check but I don’t want to BS.

      So, Vim already has that but you had to search for them.

    • I think you mean Ctrl+V 😀

      Geany snippets can be mimicked by Vim abbreviations. No plugins required. More complex snippets (like those found in TextMate, SublimeText2 etc) can be mimicked by a miriad of Vim plugins, like, for example snipMate:

    • p/P. And you can paste lines, blocks of text or simple characters. Nothing like implementing an ASCII art painter in vim using block pasting 😛 (for fun)

    • installed vim (not gvim) on cygwin just to see how it works, I’m puzzled. But i have to believe you that it works, I’m not really sure about it.

    • $ readlink -f $(which vim)
      /usr/bin/vim.gnome

      $ readlink -f $(which gvim)
      /usr/bin/vim.gnome

      Please, do go on about vim and gvim.

    • They are the same on my machine. That’s up to the package maintainer of the respective distribution.

      You can add features at compile time into Vim (run the :ver command to see which ones your executable have). So the package maintainer can decide to include a very bare-bones tiny executable to act as the vi command, a more feature-full executable to act as vim and an even bigger one for gvim. But they can be (and often are) one and the same executable which uses argv[0] to find out how you invoked it.

    • But “it doesn’t work on my machine” did?. I never said it works on my machine. Your analogy is way off. I only said that on my machine the two commands (actually, there are more: ex, vi, vim, gvim) point to the same executable. If for some reason you doubt it, feel free to install Xubuntu 13.10, install the vim-gnome package and run the commands yourself.

    • cygwin ia pachetele de soft și le compilează cu compilatorul menținut (acum) de RedHat. Cygwin e GNU/Windows, GNU făcut ca la carte. Hai să nu ne amuzăm cu ‘the lesser Linux’, că vi nu are nevoie de kernel de Linux să ruleze.

    • Let me say my story too, can I?

      Sure you can. But your story reminds me a little bit of my story, even though the outcome is different.

      At the end of the 90’s when I started with Linux I used to write Turbo Pascal under DOS with Borland’s Turbo Vision IDE. So I was very accustomed to its key bindings and other goodies like integrated compiling, linking and debugging.

      So when I tried out different editors in Linux I immediately missed some bindings. I could accept to relearn a few bindings, but I was particular fond of Ctrl-y to delete a line and it seems no editor got the issue of deleting a whole line with a single binding right. Under Emacs it was C-a C-k C-k which is ridiculous* (whereas ‘C’ is Emacs speak for Ctrl). I couldn’t understand why no editor got such a basic thing right which seemed like a no-brainer for me.

      So I rejected Emacs and vi (which I found even more ridiculous with its mode based editing) and I was happy to finally find ‘Freepascal’ which is basically an open source copy of Borland’s IDE.

      But as it turns out I did much less Pascal over time and did more web development with PHP (where also an integrated “compile” step doesn’t matter) and I was somewhat curious about Emacs, because of the buzz around it. So I started to use it more despite my complaints.

      Over time I found more possible customizations, often just by accident because I didn’t really tried to learn my editor or study the documentation. So I found an option to kill a line with just C-a C-k (one keystroke less, yeah!) and other goodies, but it took a while.

      But when I got more serious into development around 2005 and also started with Ruby on Rails I got more serious about my editor and tried to learn more about it. That is not to say that I read a book cover to cover or something like that. I just tried to learn a little bit each day and improve something.

      The effect was enormous. I started to appreciate Emacs more and more and found things impossible in any IDE (so we don’t even need to consider the old Borland IDE here…). I can now say that Emacs was a lifesaver in several critical occasions for me and it’s my main tool in my day to day work.

      And what’s more: because I tried to apply that habit of improving a little thing every day to other tools as well, I also became more fond of vim even though it’s not my main editor. I can appreciate it today as an amazing tool.

      In retrospect it was pitiful of me to reject an editor just because of a single key binding (or an missing “compile” button). Things which seem important at one point in time can turn out completely irrelevant later. But on the other hand it’s understandable: the human is a “Gewohnheitstier”, which probably can only be incompletely translated from German to English as “Creature of habit”. Habits help us to survive and don’t go crazy in this world but at some points they can become a hindrance. Learning new things and relearning old ways can lead to a completely new perspective were old views can turn out hilarious.

      I surely wouldn’t try to force “beginner programmers” (or even the experienced ones) into vim or Emacs, but I don’t mind to show my appreciation for these tools. And I’m happy that knowledge sharing in the programming community improved so vastly compared to the 90’s. It surely would have helped me back then and would have avoided some long deturs.

      As a side note: it’s impressive to see how the the fastes submissions to Adventofcode are done with the most conservative but powerful tools of vim and Perl: https://www.youtube.com/watch?v=cFJqTc4Wu2I. Even though I’m not fond of Perl I accept that it’s a proven tool, which went through the time of hardening.

      But then again, as others already wrote in this thread: it’s not about speed. It’s not not about doing the same thing but faster. It’s about being able to work differently and ultimately having to think less about the tool and more about the problem at hand.

      Only much later I learned that there is a default binding to delete a line in Emacs: C-S-DEL, this fact is just not particularly well documented… But that fact has no particular bearing on my point made

  5. After reading all the comments above (I snatched a few spare minutes) I saw exactly why there are so few nice and/or easy to learn IDE under linux. “vim is the best”. “Use this one and nothing else”. What a bunch of crap. I couldn’t imagine that there are people so strongly anchored into a single idea, refusing to accept others’ needs and ways to work.

    • Can you quote some of those comments to back your claims up? Because otherwise it’s your comment that’s a bunch of crap.

      Who said “use this and nothing else”, and who was refusing to accept others’ needs? I think it was the article itself that states that there’s no need for Vim „in this day and age”.

  6. I for one am waiting for the next article about Vim for professionals before commenting on any further issues here. Because it seems most of the valid points are ignored here and I hope that they will be presented there.

    • It’ll come at the end of this week. I have to try things that professionals never do, like copying two characters and other humorous things with (g)vim.

    • Sounds like a fun article already.

      Copying two characters? Yeah, that IS something I never do. 😀 I usually copy the current line, or down to a certain character, or to the end of the word, or the whole current word, or down to a search match, or everything within the current set of quotation marks/brackets etc.

    • How do you do that, copying an entire word, I might ask humbly? I was trying that for a few minutes already, and got tired of trying. I thought it was easy.:D

    • ‘y’ is the command, and you use a motion (or a text object) to apply the command to whatever you want.

      The motion to go to the end of the word is ‘e’. So you use ‘ye’ to copy to the end of the word. If happen to be at the beginning of the word that will have the effect of copying the whole word. If you’re at the end of the word you could use ‘b’ as a motion (jumps back to the beginning of the word) to achieve the same effect. If you’re inside of the word (works also at the beginning or the end) you’re better off using the so called text objects (Vim has an idea about what words/sentences/paragraphs/quoted strings/parenthesis delimited text are). The command for that is yiw (you can remember it as ‘yank in word’). If you want for example to yank everything inside quoted string, you can do yi”. If you want to yank everything within parenthesis, you can use yi) etc.

      And instead of y you can use c to edit, d to delete, v to select etc.

    • Pfiu. I thought I would become mean when I’d compare the operation with double clicking a word, pressing CTRL-C and CTRL-V in other place. But I digress 😉 Looking forward to writing that article 😉

    • Yeah, that would be mean. I mean, compare yt_ (copy down to the next underscore) to reaching for the mouse, carefully selecting what you need, letting go of the mouse to type Ctrl+C and returning to the default typing position.

    • Will have a look at that as well; the sooner the better. Stay tuned, sometimes this week the article will come. It’ll not be as stupid as you already think it will be 😀

    • Really? I was thinking it will be something like “After spending upwards of 5 hours learning Vim, and having, therefore, become an expert in it I still fail to see how it is a better editor than Notepad++ or even Notepad”. 😀

  7. Oh, I don’t think it will be stupid/be quick to judge your position 🙂 I just think you’re misguided when it comes to beginners. The emacs reference card is two pages you can affix to your desk and be done with “omg ctrl-c/ctrl-v doesn’t work, how do I exit this” in less than a day. When you’re past that point, you can learn about the many features than make you more efficient. There’s “absolutely no point in this day and age” (or any age) to waste your time with inferior editors. You’re going to spend 90% of your programming time editing text, the effort to learn one of vim/emacs is well worth it. The sooner the better.

  8. Damn comment system. Sorry for breaking conversation threads, this is so unlike emacs 🙂

  9. Hello!
    I am a beginner programmer, today I learned functions in C++.
    You have convinced me that Vim is an amazing tool. I want to learn how to use it like a pro, but unfortunately I cannot find the ‘compile’ button. I tried all the usual key combos, nothing works. Help?

    • You’re right. I am trolling. I already knew functions, even if I only ever used them in Pascal and Python. But hey, C++ is a step up, or so I’ve been told. And something-something, if you learn to run, then walking is a breeze.

      I’m afraid I’m entirely lost. Makefile? Google (+ wiki) suggests a makefile is, in fact, a file. I got this:

      “To prepare to use make, you must write a file called the makefile that describes the relationships among files in your program and provides commands for updating each file.”

      No, wait, it later says this:

      “2.2 A Simple Makefile

      Here is a straightforward makefile that describes the way an executable file called edit depends on eight object files which, in turn, depend on eight C source and three header files.”

      Here: http://www.gnu.org/software/make/manual/make.html

      This just keeps getting better and better. In Pascal I had a damned ‘compile & run’ button. In Python I similarly had a button. Are you telling me that I need to learn how to deal with header files and source files and making extra files just to get a “Hello, world!” out there? Or a program that calculates a factorial, to actually use functions?

    • Thanks, that actually looks way less scary. It’s getting kind of late today, so I’ll check it out tomorrow.

  10. Pingback: Why I wouldn’t recommend vim (or emacs) to developers | dorinlazar.ro

  11. Posting in this epic thread to say that Vim is still better than most of IDEs in 2015. You get things done more quickly in Vim.

  12. «How many chicks in the first year of college would pick up vim and be happy about it?»

    I don’t know about vim, but three weeks ago we hired part time a first year IT student. In that time she has learned enough to use emacs to do pretty much everything. Including edit multiple file names in a directory using dired, managing git repositories using magit, managing a task list in org mode, and exporting it to html and she can work from home and ask me questions when she gets stuck via IRC using rcirc mode. Finally she is using eshell to run a local copy of jekyll that automatically rebuilds the web site when a file is saved. And then ssh into the server pull changes and rebuild the site.

    Is there a learning curve? Yes, that’s what being a professional is all about, mastering the most powerful tools to do the job. And it’s better to be introduced to these tools early, and get that learning curve out of the way so you can leverage the power of these tools to do professional work. NotePad++ is simply not in the same league as Vim and Emacs.

    And yes she’s happy. And I’m not talking about a middle class white kid in California. This is a khmer girl from a modest background working in our office in Phnom Penh for whom English is definately a second language. She had never even heard of any of these tools before working with us….

    • If you’re a professional you don’t bother yourself with vim unless you really really want to be annoying. I know, it’s fun to go out with roller blades, but they can take you so far, and you need proper tools (like a car) to drive for more than a few kilometers.

  13. Hey, look, someone that doesn’t know what they’re talking about. On the Web! What are the chances?

    Notepad++? I’d laugh if I wasn’t puking.

  14. David, did you write this in emacs?

    I could since I have the wonderful ‘Edit with Emacs’ browser extension installed (https://chrome.google.com/webstore/detail/edit-with-emacs/ljobjlafonikaiipfkggjbhkghgicgoh). That allows one to edit a textbox in emacs with the press of the button without the need to copy and paste around. So one isn’t forced to type text in a tiny textbox with constrained editing capabilities. (Even though one of the nice goodies of Mac OS X is that it uses some Emacs keybindings by default.)

    I probably should have used it considering that it took longer than needed with more mistakes left…