This zsh widget allows you to list files in the current directory without interrupting the command you are typing.

Usage

Hit <tab> in the middle of any command. It will list all files below the command line. Hit <space><tab> on an empty command line. It will list directories. Hit <space><space><tab> on an empty command line. It will list executables.

Regular completion is unaffected.

Installation

Get the code from github, and append it to your .bashrc or .zshrc.

To do it in one step, paste the following in your zsh terminal

wget https://raw.githubusercontent.com/nachoparker/tab_list_files_zsh_widget/master/tab_list_files_zsh.sh -O - >> ~/.zshrc

It will be available next time you open a zsh session.

Configuration

You can configure cases 2 and 3 above to include a cd and ./ as a prefix for a nice and handy shortcut. Include in your .zshrc

export TAB_LIST_FILES_PREFIX

Extras

I recommend complementing this with the push-line-or-edit zsh builtin. Include the following in your .zshrc

bindkey '^q' push-line-or-edit

After this, you can cancel any ongoing command that you might be typing by hitting <CTRL>q , perform another command and then come back just to where you left off.

Code

# List files in zsh with <TAB> # # Copyleft 2017 by Ignacio Nunez Hernanz <nacho _a_t_ ownyourbits _d_o_t_ com> # GPL licensed (see end of file) * Use at your own risk! # # Usage: # In the middle of the command line: # (command being typed)<TAB>(resume typing) # # At the beginning of the command line: # <SPACE><TAB> # <SPACE><SPACE><TAB> # # Notes: # This does not affect other completions # For 'cd ' or './' to be prepended, add to .zshrc 'export TAB_LIST_FILES_PREFIX' # Complement this with push-line-or edit (bindkey '^q' push-line-or-edit) function tab_list_files { if [[ $#BUFFER == 0 ]]; then BUFFER="ls " CURSOR=3 zle list-choices zle backward-kill-word elif [[ $BUFFER =~ ^[[:space:]][[:space:]].*$ ]]; then BUFFER="./" CURSOR=2 zle list-choices [ -z ${TAB_LIST_FILES_PREFIX+x} ] && BUFFER=" " CURSOR=2 elif [[ $BUFFER =~ ^[[:space:]]*$ ]]; then BUFFER="cd " CURSOR=3 zle list-choices [ -z ${TAB_LIST_FILES_PREFIX+x} ] && BUFFER=" " CURSOR=1 else BUFFER_=$BUFFER CURSOR_=$CURSOR zle expand-or-complete || zle expand-or-complete || { BUFFER="ls " CURSOR=3 zle list-choices BUFFER=$BUFFER_ CURSOR=$CURSOR_ } fi } zle -N tab_list_files bindkey '^I' tab_list_files # uncomment the following line to prefix 'cd ' and './' # when listing dirs and executables respectively #export TAB_LIST_FILES_PREFIX # these two lines are usually included by oh-my-zsh, but just in case autoload -Uz compinit compinit # uncomment the following line to complement tab_list_files with ^q #bindkey '^q' push-line-or-edit # License # # This script is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This script is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this script; if not, write to the # Free Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA

References

http://zsh.sourceforge.net/Guide/zshguide04.html

http://sgeb.io/posts/2016/11/til-bash-zsh-half-typed-commands