Hacker News new | past | comments | ask | show | jobs | submit login

hjkl for moving around.

I and A insert beginning/end of line.

0 and $ go to the beginning/end of line without entering insert mode.

:%!command -- Runs the entire document through the command. If you use visual mode and then press ':!command' and it will run the selection through the command specified. Super useful for sorting a list.

Also ctrl+[ is equivalent to esc. If you rebind caps to ctrl you can easily hit escape and other commands like ^d, ^u (page down and up).




0 and $ go to the beginning/end of line without entering insert mode

You might find ^ more useful than 0 for indented code as it takes you to the beginning of the text on the line (like the regexp).


If your aim is to indent/de-indent text, try the > and < commands (in normal mode).

I also find that selecting large blocks of text then using the = command to autoindent everything is exceedingly useful.


do you know how to highlight a block then double-indent? I can't make that work. With a block highlighted, I only know how to indent one ts at a time (then re-hightlight, etc.).


You can use the universal "repeat last action" command: just hit . You can hit . as many times as you like and it will keep indenting.


d'oh! I never even thought of that...it works great! Thank you.


Great tip! I will be using this one.


  > Super useful for sorting a list.
Unless you have some special script/filter for specific sorting of lists, then why not just use ':sort' instead of ':!sort' (i.e. the Vim sort command, rather than piping it to /usr/bin/sort)?


Why should vim have :sort built-in, when /usr/bin/sort already does it so well?

If you really want to get on a roll with vi, think of all the other cases where you wish it could do something, then make it work with :%!command_written_in_any_language_you_want .

You can also apply it to ranges. "%1,5!rev" reverses lines 1-5, etc.


I never said that '%!command' was a bad thing. I was just pointing out that that particular use-case was already built into the editor. We could make pedantic arguments about Unix all day long (e.g. "Each command should do something specific and do it well, Vim doesn't need the :sort built-in" vs "Why should I incur the cost of starting up another process and having it eat up my precious memory space?") but it's relatively useless.

Being able to pipe through commands is a powerful tool, but using an example where the external command already has a built-in equivalent seems possibly confusing to the (novice Vim'er) reader (please don't rattle me off the laundry list of options that /usr/bin/sort has that :sort doesn't because you'd be missing the point).

That said... On the topic of ranges, never give :bd! a range unless you know what you're doing. I ran :bd! once while I had a number of lines selected in visual mode because I though that the selected lines wouldn't affect :bd. Bad idea. The '<,>' part of the range apparently is converted to line numbers (e.g. '3,6') and then :bd reads that range as the buffers to delete. So when you select lines 1-8 and then hit :bd! it goes something like this:

  :<,>bd! -> :1,8bd! -> delete buffers 1-8 without prompting for unsaved changes
Oops!


You're absolutely right (and sort's options are rather quirky), just trying to nudge people to thinking about piping through shell commands that way. There's a lot of power in the ex parts of vi (the : commands) that I seldom hear vi(m) users mention.


I do a lot of bash scripting so I know `/usr/bin/sort` decently well. Using this technique I can use my bash scripting abilities to enhance my vim abilities.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: