---
title: How to Turn Your Windows Machine into Unix
description: Six tips to make software development in windows more tolerable
---

## How to Turn Your Windows Machine into Unix

For the many years, the requirements of my job forced me to use Windows for working on parts of our code base. When working in Windows, I dearly missed the tools of a unix environment (ls, grep, the shell, etc). But over the years I've figured out a bunch of hacks that make using Windows a lot more tolerable. Here they are:

1) **Install a real text editor - Vim or Emacs.** The optimized key bindings and extra power of Emacs/Vim allow you write code or prose with amazing speed. [Read Steve Yegge](http://sites.google.com/site/steveyegge2/effective-emacs) if you're not convinced. Put emacs in the system path, so that as you browse around in the shell you can edit files by entering ">emacs file.txt"

2) **Install the [GNU utils for windows](http://gnuwin32.sourceforge.net/packages.html) and put them on your system path**. Now you can use all your favorite unix utilities such as grep, touch, ls, diff, etc, from your windows command line.

3) **Enable copy/paste from the command line**. In the windows command prompt, click on the icon in the upper left and then click properties. Then set "Quick Edit" mode to checked. Now you can copy text by highlighting it with the mouse and hitting enter. You can paste by clicking the middle mouse button.

4) **Install a better shell. I prefer IPython.** IPython gives you most of the bash functionality and key bindings. Type Ctrl-r to search for previous commands. Ctrl-A to move to the beginning of the line, ctrl-k to kill a line, ctrl-y to paste/yank a line back, etc. The tab completion works like unix where it only completes until the point of ambiguity. The only annoying thing is that you must prefix all shell commands with "!". But on the plus side, you also have an interactive python prompt, which is handy if you need to test a snippet of code or do some quick math.

5) **Remap Caplocks to trigger ctrl**. Cap-locks is basically useless. Ctrl is used all the time in programming, especially if you use emacs. Remapping will make you type far more efficiently.

6) **Forget about Cygwin**. Cygwin offers the promise of a full unix shell from within windows. But the Cygwin environment has too many pieces that are broken or incompatible. You feel like you are in unix, but then you try to run a script and you get a deep down stack trace.  You spend six hours trying to debug it before finding that the underlying C-library is simply incompatible with the Cygwin environment. If you want to use linux on your windows box without dual booting, use a full VM like Colinux or VM Ware. I keep a small, headless, Colinux, Centos5 process running in the background that I SSH into if I need to do something that is linux only.

 

posted by Patrick Fitzsimmons on May 13, 2011

topics: [programming](https://pfitz-old.hs-sites.com/topic/programming)

[« back to the blog front page](https://pfitz-old.hs-sites.com/)

#### [Add a comment ＋](https://pfitz-old.hs-sites.com/2011/05/how-to-turn-your-windows-machine-into-unix#blog-comment-form)

Name

Email

Website

Comment

 Subscribe to follow up comments for this post

[![patrick-fitzsimmons-headshot](https://pfitz-old.hs-sites.com/hs-fs/assets/img/patfitz-face-circle-vintage.png)](https://pfitz-old.hs-sites.com/)

#### [Patrick Fitzsimmons](https://pfitz-old.hs-sites.com/)

I am a startup guy and software engineer based in Cambridge, MA. Current I am co-founder of [Grokky](http://www.grokky.com). Before that, I spent seven years at HubSpot. I joined HubSpot as the first employee. During the early days I cranked out the first prototypes, during later days I helped scale our software and team to serve ten thousand customers.

[Read more about me and my work](https://pfitz-old.hs-sites.com/about)

[![](https://pfitz-old.hs-sites.com/hs-fs/mail.png)](https://pfitz-old.hs-sites.com/2011/05/how-to-turn-your-windows-machine-into-unix#) [![](https://pfitz-old.hs-sites.com/hs-fs/linkedin.png)](http://www.linkedin.com/pub/patrick-fitzsimmons/1/373/7b) [![](https://pfitz-old.hs-sites.com/hs-fs/assets/img/twitter.png)](https://twitter.com/pfitzsimmons) [![](https://pfitz-old.hs-sites.com/hs-fs/assets/img/octocat.png)](https://github.com/pfitzsimmons) [![](https://pfitz-old.hs-sites.com/hs-fs/assets/img/rss.png)](http://www.patfitzsimmons.com/rss.xml)

### Get new blog posts via email

### Posts by topic

- [programming (3)](https://pfitz-old.hs-sites.com/topic/programming)
- [about (1)](https://pfitz-old.hs-sites.com/topic/about)