How to use Cmd's tab autocomplete effectively?

48

24

I've used the Bash shell on Linux for years and I'm very fast with it. By frequently appealing for autocomplete by hitting the tab key, I'm able to write long commands in few keystrokes.

Recently at my job I've started using the Windows Command Prompt and Cmd. I'm very slow in Cmd. It has an autocomplete feature, but it works differently. I think I understand how it works, but I don't understand how to use it effectively, in fact it often slows me down. So I ask, how to use how to use Cmd's autocomplete effectively?


Let me give an example. First I'll describe how I use Bash, then how I try to use Cmd, and what goes wrong.

Suppose the folders in the current directory have names made from a continent and a country, eg. africa-nigeria, asia-india, europe-france, and that I want to change folder to europe-norway.

The way Bash's autocomplete works is that the tab key expands only if there is a unique expansion. Otherwise, nothing happens, but you can press tab a second time to list possible expansions.

So to move to Norway in Bash, I type cd and then make the following keystrokes:

  1. e tab for europe-
  2. n tab (nothing happens)
  3. tab again. It lists europe-netherlands and europe-norway as potential expansions.
  4. o tab for europe-norway.

Great! Thanks Bash.

However, when I try the same keys in Cmd, it expands e tab to europe-albania, which happens to be the first folder beginning 'e', but isn't the folder I wanted! What should I do now—is it possible to make Albania into Norway? Or must I cancel the command with Escape and type everything from scratch?

Colonel Panic

Posted 2013-04-15T14:33:48.987

Reputation: 9 529

Can you use a menu, eg. batch menu? – Endoro – 2013-04-15T15:11:25.633

At the moment Stephan's answer is correct for you. Just type the cd e and then press the TAB key. What Windows is doing here it start sorting the folders in alphabetical order in words. As If there is Europe-albania before europe-norway, just keep pressing the TAB key continuously until you don't get your desired directory. – avirk – 2013-04-20T01:26:11.187

5@Avirk, so the quickest way from Albania to Norway is to press the tab key 27 times? – Colonel Panic – 2013-04-23T15:07:32.373

Answers

53

1 year update: I came to the conclusion that Cmd's autocomplete is unusable, and stopped using it.

I installed Clink which gives you Bash-style autocompletion in Cmd.

Clink combines the native Windows shell cmd.exe with the powerful command line editing features of the GNU Readline library, which provides rich completion, history, and line-editing capabilities

It's brilliant.

Colonel Panic

Posted 2013-04-15T14:33:48.987

Reputation: 9 529

What an amazing find! – ysap – 2015-02-26T12:31:53.180

1Yes, Clink is the best for this. I use Clink and Git for Windows to provide a better cmd alternative. – Matt – 2015-10-14T08:00:04.117

Unlike the bash shell, this doesn't auto-complete file names. – Yashbhatt – 2016-06-17T08:21:35.270

16

Cygwin will allow you to run a Bash shell (apart from many other POSIX environment software) under Windows.

Otherwise, you might try an alternative shell, rather than than the ancient Command Prompt, to find one that best fits your needs.

Here is a list of some consoles that emulate bash on Windows :

win-bash
Road Bash
Git Bash described in this article

Other consoles :

Microsoft's Windows PowerShell and its wikipedia article (the most powerful)
Console with an article
ColorConsole
PowerCmd
GS.EXE
PyCmd

[EDIT] I have since discovered Cmder which is an excellent tabular console replacement that also brings with it much of the Linux shell behavior as well as a port of many Linux file-handling applications such as grep.

harrymc

Posted 2013-04-15T14:33:48.987

Reputation: 306 093

1On my Win7, PowerShell's Autocomplete (using TAB) (mis)behaves just like in CMD. – ysap – 2015-02-26T12:31:00.283

3+1. Cmd has always been a pathetic excuse for a shell, and Microsoft long ago gave up any development of it. Since you're already performant in bash, your best option will be to continue to use it by installing Cygwin. – Andrew Schulman – 2013-04-20T11:06:24.793

1of course, PowerShell is the best on that list ;) – Taylor Gibb – 2013-04-24T09:50:50.373

To complete the list a bit more: There was also 4DOS or better 4NT, both rather popular in former times and much more powerful than command.com or cmd.exe. It seems that Take Command (http://jpsoft.com/take-command-windows-scripting.html) is their successor. However I never used that one personally (and it's commercial).

– mpy – 2013-04-24T13:00:57.193

11

Hitting the TAB key toggles through all existent directories.

Try to enter just cd then TAB for a few times and you will see the principle.

cd countries/europe-s[TAB][TAB] 

for example will bring you to the second match (countries/europe-serbia)

Stephan

Posted 2013-04-15T14:33:48.987

Reputation: 721

4

Bash in linux attempts to match and autofill all the first characters that are common to all files.

The windows command prompt, on the other hand just autofills the command prompt with the first element that matches.

e.g.: In linux bash: After typing cd countries\eTAB, bash will go upto countries\europe- since it matches all the filenames that start with e, and then you can enter the next few characters and press TAB again.

In Windows command prompt: After typing cd countries\eTAB, the command prompt will match the first possible filename that starts with e, europe-albania in your case, but it still remembers that you had only entered an 'e'. So if you press TAB again, it will show the next possible match (alphabetical order), europe-andorra.

If you want to get to europe-norway quicker, you could either:

  1. Type europe-no and then press TAB or
  2. Type e and then keep pressing TAB until it shows europe-norway

Chirag Bhatia - chirag64

Posted 2013-04-15T14:33:48.987

Reputation: 931

2

In Windows 10, filename and directory name completion can use wildcards.

For the example of changing to europe-norway, either of these commands should work:

cd *nor*<tab>

or

cd *way<tab>

You can use multiple '*'s, and there is not an implicit leading or trailing '*'.

Timothy

Posted 2013-04-15T14:33:48.987

Reputation: 21

2

Update: Git Bash is pretty much all I need

Use PowerShell ISE instead of just powershell. This give you access to intelliSense auto-complete, which spawns a list of options upon typing or Ctrl+Space. ISE also opens up a lot of other interesting possibilities like tab completion and other stuff.

Downside is, it doesn't support interactive applications like ssh or python shell.

I have actually started using ConEmu today because of this downside. ConEmu is pretty cool.

The Windows PowerShell Integrated Scripting Environment (ISE) is one of two hosts for the Windows PowerShell engine and language. With it you can write, run, and test scripts in ways that are not available in the Windows PowerShell Console. The ISE adds syntax-coloring, tab completion, IntelliSense, visual debugging, and context sensitive Help.

The ISE lets you run commands in a console pane, but it also supports panes that you can use to simultaneously view the source code of your script and other tools that can plug into the ISE. You can even open up multiple script windows at the same time, which is especially helpful when you are debugging a script that uses functions defined in other scripts or modules.

https://technet.microsoft.com/en-us/library/dd819514.aspx

ThaJay

Posted 2013-04-15T14:33:48.987

Reputation: 131

1

you can use Ctrl+Space even in non-ISE environment

– phuclv – 2018-06-28T01:29:46.983

1

Hold Tab key to move forward through the options and Shift+Tab to cycle back.

Right arrow → key will reproduce last cmdline 1 character at a time. I find that useful when renaming files.

eg:

ren file.1.mp4 Guitar.Licks.01.Pentatonic.2.notes.per.string.mp4

Hold right arrow → till 1, then type 2. Hold right arrow til 1, then type 2. Hold right arrow til 2, then type 3, hold right arrow till end. Result would be...

ren file.2.mp4 Guitar.licks.02.Pentatonic.3.notes.per.string.mp4

dchip

Posted 2013-04-15T14:33:48.987

Reputation: 19

the right arrow trick is cool, but unfortunately doesn't work with Ctrl+Tab, and I never press that key just to go to the end of the line. Pressing up arrow then Home or Ctrl+Tab to fix a few characters would be much faster – phuclv – 2018-06-28T01:39:36.933

1

Quite simply using regedit:

1) Start -> Run -> regedit 2) Traverse to the following for current user or all users of the system,

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

3) Double click on command processor and change the value to "9" in decimal or "0x9" in hex. 4) This would enable the TAB to autocomplete.

Reopen your command prompt and try it out.

Porcupine

Posted 2013-04-15T14:33:48.987

Reputation: 11

0

In windows 10(7?) use shift + tab to cycle through available autocomplete options given a partial path.

When called with nothing it will cycle through all available options in the directory.

Michael.

Posted 2013-04-15T14:33:48.987

Reputation: 101

1

This does nothing, Shift+Tab just reverses the iterating order, just like adding shift to any other switching shortcuts like Ctrl+Tab, Win+Tab, Alt+Tab, Ctrk+K... With Tab alone you will also cycle through all available options in the directory

– phuclv – 2018-06-28T01:31:59.533