I use Windows, Mac, and Linux, each for different reasons. When I run Windows, I like to have a shell that works sorta like bash, but doesn’t run in a subsystem. That is, I like to have the utility programs and command editing features that I’m used to from bash on Mac or Linux, but I want to run native Windows code and not a little version of Linux hosted by Windows. [1]
It took a while to find something I’m happy with. It’s easier to find Linux subsystems like Cygwin. But cmder does exactly what I want. It’s a bash-like shell running on Windows. I also use Windows ports of common Unix utilities. Since these are native Windows programs, I can run them and other Windows applications in the same environment. No error messages along the lines of “I know it looks like you’re running Windows, but you’re not really. So you can’t open that Word document.”
I’ve gotten Unix-like utilities for Windows from several sources. GOW (Gnu on Windows) is one source. I’ve also collected utilities from other miscellaneous sources.
Tab completion and file association
There’s one thing that was a little annoying about cmder: tab completion doesn’t work if you want to enter a file name. For example, if you want to open a Word document foo.docx
from the basic Windows command prompt cmd.exe, you can type fo
followed by the tab key and the file will open if foo.docx
is the first file in your working directory that begins with “fo.”
In cmder, tab completion works for programs first, and then for file names. If you type in fo
followed by the tab key, cmder
will look for an application whose name starts with “fo.” If you wanted to move foo.docx
somewhere, you could type mv fo
and tab. In this context, cmder
knows that “fo” is the beginning of a file name.
On Mac, you use the open
command to open a file with its associated application. For example, on the Mac command line you’d type open foo.docx
rather than just foo.docx
to open the file with Word.
If there were something like open
on Windows, then tab completion wold work in cmder
. And there is! It’s the start command. In fact, if you’re accustomed to using open
on Mac, you could alias start
to open
on Windows [2]. So in cmder
, you can type start fo
and hit tab, and get tab completion for the file name.
Miscellaneous
The command assoc shows you which application is associated with a file extension. (Include the “.” when using this command. So you’d time assoc .docx
rather than assoc docx
.
You can direct Windows shell output to the clip command to put the output onto the Windows clipboard.
The control command opens the Windows control panel.
This post shows how to have branching logic in an Emacs config file so you can use the same config file across operating systems.
More MS Windows posts
- Entering Unicode characters on Windows
- Deleting the recycle bin icon
- Emacs on Windows
- Remapping caps lock
- Windows keyboard shortcuts
[1] Usually on Windows I want to run Windows. But if I do want to run Linux without having to go to another machine, I use WSL (Windows Subsystem for Linux) and I can use it from cmder. Since cmder supports multiple tabs, I can have one tab running ordinary cmd.exe and another tab running bash on WSL.
[2] In the directory containing cmder.exe, edit the file config/user-aliases.cmd
. Add a line open=start $1
.