How do I make Vim do normal (Bash-like) tab completion for file names?

Vim

Vim Problem Overview


When I'm opening a new file in Vim and I use tab completion, it completes the whole file name instead of doing the partial match like Bash does. Is there an option to make this file name tab completion work more like Bash?

Vim Solutions


Solution 1 - Vim

I personally use

set wildmode=longest,list,full
set wildmenu

When you type the first tab hit, it will complete as much as possible. The second tab hit will provide a list. The third and subsequent tabs will cycle through completion options so you can complete the file without further keys.

Bash-like would be just

set wildmode=longest,list 

but the full is very handy.

Solution 2 - Vim

The closest behavior to Bash's completion should be

set wildmode=longest:full,full

With a few character typed, pressing tab once will give all the matches available in wildmenu. This is different to the answer by Michael which opens a quickfix-like window beneath the command-line.

Then you can keep typing the rest of the characters or press tab again to auto-complete with first match and circle around it.

Solution 3 - Vim

Apart from the suggested wildmode/wildmenu, Vim also offers the option to show all possible completions by using Ctrl + D. This might be helpful for some users that stumble across this question when searching for different autocompletion options in Vim like I did.

Solution 4 - Vim

If you don't want to set the wildmenu, you can always press Ctrl + L when you want to open a file. Ctrl + L will complete the filename like Bash completion.

Solution 5 - Vim

I'm assuming that you are using autocomplete in Vim via Ctrl + N to search through the current buffer. When you use this command, you get a list of solutions; simply repeat the command to go to the next item in the list. The same is true for all autocomplete commands. While they fill in the entire word, you can continue to move through the list until you arrive at the one you wish to use.

This may be a more useful command: Ctrl + P. The only difference is that Ctrl + P searches backwards in the buffer while Ctrl + N searches forwards... Realistically, they will both provide a list with the same elements, and they may just appear in a different order.

Solution 6 - Vim

set wildmode=longest:full gives you a Bash-like completion with:

  • suggestions in a single line
  • Tab completing only what is certain
  • Right/Ctrl-n | Left/Ctrl-p to select suggestions.

Preview of described feature

From the help:

If you prefer the <Left> and <Right> keys to move the cursor instead
of selecting a different match, use this:
  	:cnoremap <Left> <Space><BS><Left>
  	:cnoremap <Right> <Space><BS><Right>

Solution 7 - Vim

Try using :set wildmenu. Apart from that, I'm not sure what exactly you're trying.

Oh, yeah, and maybe try this link: link

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEric JohnsonView Question on Stackoverflow
Solution 1 - VimmichaelView Answer on Stackoverflow
Solution 2 - VimweynhamzView Answer on Stackoverflow
Solution 3 - Vimtc88View Answer on Stackoverflow
Solution 4 - VimAmjithView Answer on Stackoverflow
Solution 5 - VimMikeView Answer on Stackoverflow
Solution 6 - VimAndré Willik ValentiView Answer on Stackoverflow
Solution 7 - VimRookView Answer on Stackoverflow