Bram Moolenaar, creator of the Vim editor, shares his editing advice and Vim history, including the Charityware project.
HN commenters cite his "Seven habits of effective text editing" as a source of good insight on learning Vim, though one warns against lingering in phase 1.
> indexes everything
So should your text editor (and/or it's companion programs)
> and provides superior auto-completion.
See above. Superior is a bold claim, superior out of the box for "strongly" supported languages, perhaps? (Eg: one way of working with java in vim is to use eclipse for extracting some information about a project[1])
Personally I'm more familiar with vim, than with Emacs -- arguably the main difference is that Emacs has one standard and sane scripting language (lisp), while vim doesn't (I'm very happy a lot of masochists work tirelessly to provide vim plugins for everything I need (and a great deal I don't) -- but I think it's hard to argue that vimscript is a "good" language. And having other bindings (eg: ruby, python) is a bit of a mixed blessing)).
But what they have in common, is a strong focus on making it easy to automate transformation of text. Any kind of text. With any kind of automation, via commands. As such they empower a continued process of improving the process of writing and editing.
I like Moolenaar's (vim's creator) short text and expanded talk on 7 habits of effective text editing:
"7 Habits For Effective Text Editing 2.0":
https://www.youtube.com/watch?v=p6K4iIMlouI
"Seven habits of effective text editing":
http://www.moolenaar.net/habits.html
I often feel that modern IDEs with typical "modern" languages, tend to trap you in a certain way of working that is "with" the IDE, that tend to be counter-productive if that "one true…
While it was well written, and with best intentions, I don't think there is any real significant "tips" to increase "productivity". All things aside these are just some best practices sprinkled with some examples. This is similar to when your parents tell you to brush your teeth and floss daily.
I haven't been programming a lot but here are some ideas that I've found, in similar vein to the parent article.
1. Watch Bram Moolenaar's talk or read his notes - http://www.moolenaar.net/habits.html . Essentially learn how to use your text editor, as that's the thing you're going to be spending a good deal of your time in. In three steps, his suggestion is - Find what you're doing repeatedly, automate it and bind it to a key, make it a habit.
2. use a good version control system. Use a DVCS like git/mercurial/bzr and make lightweight branches for even the tiniest little features. That'll allow you to multitask like crazy! If you start properly using branching, you can write more code quickly and safely and switch between contexts.
3. Make sure your build system is optimal. If you spend too long waiting for builds to take place, maybe you can explore options to make it better.
4. The most important productivity secret imo - ACTUALLY WRITE CODE. Don't think about writing code, don't read blogs about writing code, don't follow twitterers who write code. Most importantly, don't get distracted and idle away when you're trying to write code.
I have some amount of mastery over my…
I’d encourage you to apply the three-step process presented in [0] (there’s also a video [1]), which is actually not specific to Vim:
1. While you are working with software tools, keep an eye out for actions you repeat and/or spend quite a bit of time on.
2. Find out if there is a command (or macro facility etc.) that will do this action quicker. Read the documentation, ask a friend, or look at how others do this.
3. Train using the command. Do this until your fingers type it without thinking.
This means that you can learn new commands only as the need comes up by observing what you do. Which commands you will want to learn thus depend on the operations you are frequently doing and/or that cost you a lot of time.
As I said, that strategy is applicable in general. Tools however differ in how well they support it, e.g. in terms of available commands and facilities.
You could start applying that strategy in VSCode (which I’m not familiar with, by the way). If it works well enough, great. If you find it limiting, switch to Vim, Emacs, or some other IDE that serves your needs better.
[0] https://moolenaar.net/habits.html
[1] https://youtu.be/eX9m3g5J-XA
What I found about Vim is that it requires a bit of mind shift, compared to other IDEs. I came to the game very late, but yeah, I've been editing with Vim for the past 6-7 years.
My primary motivation when moving to Vim, was that I didn't like using mouse and then running back to the keyboard to write text. Now, it might not seem like much time is wasted during this shift, but imagine doing this many time during work day and it adds up. Furthermore, I did a lot of editing on remote systems, which were headless, so you didn't get graphical editors.
When learning Vim it's not wise to learn about everything at once. start slow at first, lear a few commands, then when you find you are doing something many times, try to find way to optimize it. Try not to use mouse for highlighting, use different visual modes instead (visual line, visual block are great).
Here is article be the Vim author which can give you some hints on how to edit files: http://moolenaar.net/habits.html
And as he mentions there, it can be applied to making your editing more efficient with other editors as well, so it's not a waste of time :)
vimtutor is pretty good, actually.
Outside of that, http://yanpritzker.com/2011/12/16/learn-to-speak-vim-verbs-nouns-and-modifiers/ has a nice explanation of the editing worldview, which ties in with Steve's quote in http://learnvimscriptthehardway.stevelosh.com/chapters/16.html, "The idea of operators and movements is one of the most important concepts in Vim, and it's one of the biggest reasons Vim is so efficient. We're going to practice defining new motions a bit more, because extending this powerful idea makes Vim even more powerful."
Check out http://www.moolenaar.net/habits.html, http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118, and maybe http://vimcasts.org/episodes/archive?
I've been using it for about a decade, so I think I've lost the beginner's mind to evaluate whether these are really the right entry points. Lots of people are passionate about vim, though; some googling should find you the exercises that will help you the most.
Really sad to hear this... My first donation as a late teen to free software, was to the ICCF Uganda, thanks to vim's charityware license. It was maybe around 1997 or 98. Later versions of vim used a formal free software license, but still off-band encouraging donations to the ICCF. I've always been a bit skeptical to the whole concept of charity, but I respected Bram Moolenaar so much due to his work on vim that I trusted his judgement. I kept donating to the ICCF for a few years until he was hired at google.
I was also deeply honored to see my (tiny, insignificant) minority language on his page for the word Mooleenar in many languages [0].
As a matter of respect and to honour his memory, I will keep using the last version of vim (by his last commit [1]) as my main text editor for as long as humanly feasible.
[0] https://www.moolenaar.net/
[1] https://github.com/vim/vim/commit/4c0089d696b8d1d5dc40568f25ea5738fa5bbffb