I used to install Linux on a whim, and when I couldn't reach the level of productivity I was used to in Windows (since I had been using it for so many years), I'd go back to Windows in a few weeks. What finally changed this and made Linux my favorite OS to develop in was i3(wm). Here's a couple other productivity tips:


  • `vim -p file1 file2 ...` opens multiple files in tabs in vim. With zsh expanding regex, `vim -p ./*` opens all files in your current directory as tabs in vim. `vim .`  browses the current folder using vim
  • use `:! <bash command>` like `:! ls` to run normal bash commands from vim and see the results in that window.
  • Use Awesome vimrc's awesome version as a base of your .vimrc if you don't already have one. Also find the super pretty `wombat256mod` color scheme somewhere, put it to ~/.vim/colors/  and add a `set colorscheme wombat256mod` to your ~/.vimrc.
  • After installing the awesome vimrc, add `execute pathogen#infect()` to your .vimrc, then you can install vim plugins just by cloning them from github to `.vim/bundle/`

Window manager / i3

  • Use a tiling window manager, like awesome or i3wm. I've never used awesome, because i3 is so awesome, but definitely give one of those a try. They're actually the killer feature that made me stick with Linux for the first time. Neither Windows or OSX have anything as good as i3.
  • Change i3 directional keybinds to vim keybinds, since they're by default  one-to-the-right-of-vim-arrows (jkl; instead of hjkl) which confuses the hell out of your brain when you use both vim and i3


  • use `xset r rate <time in milliseconds until key repeat starts> <repeats per second>` for example `xset r rate 200 40` to make scrolling around vim faster. The default speed limits are for old people.
  • use zsh and oh-my-zsh rather than bash. It's so much better (case insensitivity, for one), and easy to use if you're used to bash.
  • make a folder called dotfiles in your home folder, put the files you'd like to sync between installations there, version control it (I have a private Github repo for it), and symlink them from that folder to your ~/
  • Use `mosh` instead of `ssh` if you often work over high latency connections.
  • If you need to follow multiple log files when executing something in the command line, instead of having multiple terminals for logging or having a different split for each file in the same terminal, you can interleave the logs by opening each log file with `tail -f /tmp/logfile &` to the background. This way as the log entries come in, they'll be in chronological order in the same shell.