Modernizr does a lot of things, and creating CSS classes to mark the existence of features is just one of those things. Another thing that Modernizr does is allow you to style new HTML5 elements like <section>, <header>, etc. - I think that there is a similar issue here, and I'm really on the fence about it. Depending on the browser to execute Javascript so that CSS is able to style a new element seems risky, and for quite a marginal benefit. I guess people are just trying to make the future happen sooner, but it seems foolish to introduce an external dependency and scripting requirement just because <header> looks better than <div class="header">. What do we really gain here by being more "semantic"? Aren't we just trading reliability for fashion?
That's essentially what it does, but if you use the "autocd" option as well, you don't need to type "cd" - you can just use the name of a directory as a command. So, "autopushd" would ensure that these operations use the directory stack also.
A related issue is the fact that many drivers show up in the Add/Remove Programs list (or whatever they call it these days), so you can't just remove everything or you will find that your keyboard, touchpad, media card reader, etc. no longer work. Sometimes it can be really difficult to determine if a program is an essential driver or useless bloat.
Another great tool for movement is next-error, bound to C-x ` by default, though I bind it to M-` for convenience. Despite its name, it's not just useful for jumping to error locations in source code. It also jumps to matches from M-x occur and M-x rgrep, making it very easy to hop around from one regex match to another. A negative prefix argument can be used to navigate in the reverse direction, in case you go too far.
I worked at Borders after the dot-bomb, since my car was broken down and it was the only job I could find that I could ride my bike to. I bought a bunch of programming books with my employee discount and then realized what a complete chump I was - the exact same books, online at Amazon, were cheaper including (free!) shipping than in the store with my employee discount. I quit soon after and got a job writing code.
I doubt I'll ever be a heavy vim user because it just doesn't fit my brain well, but this video is an example of why I have great respect for people who have truly mastered vim and can use it quickly and effectively. The rapid click-clack of the keyboard--as he pounds out commands as fast as he can think them up--is the same familiar sound I remember from vim experts I've known in the past.
Here is an emacs function I use, which does the reverse of the refactoring in the screencast. I use it by marking an expression and typing M-x extract-variable, which asks me what I want to call the variable. It then replaces the expression with the variable I named and puts "<varname> = <expression>" into the kill buffer. I navigate to where I want to define the variable and type C-y to yank, which completes the refactoring. It's a useful tool for breaking apart deeply nested code, pulling out constants to make things configurable, and improving the readability of long lines.
(defun extract-variable ()
"Micro-refactoring: replace the region with a variable and save an
assignment statement in the kill ring. After calling this function, find a
good destination for the assignment and yank."
(interactive)
(let ((var-name (read-string "Variable name: ")))
(kill-region (region-beginning) (region-end))
(kill-append " = " t)
(kill-append var-name t)
(unless (eq major-mode 'python-mode)
(kill-append ";" nil))
(insert var-name)))
"I once asked Ivan, 'How is it possible for you to have invented computer graphics, done the first object oriented software system and the first real time constraint solver all by yourself in one year?" And he said "I didn't know it was hard."
-- Alan Kay on Ivan Sutherland.
If you use transient-mark-mode (which is on by default these days), you can mark a region and then use replacement commands like query-replace (M-%) that affect just that region.
I wrote something like this a few years ago. It's hard to get all the edge cases right, but it works well enough for my purposes. I still use it occasionally as a format string generator - I paste the format strings into my code rather than doing the natural language parsing thing every time.
It has a more conventional builder-style API that may answer the complaints of those wishing for a more straightforward way to write loops.