我目前正在从csh切换到zsh我正在写一个.zshrc试图获得我在这个新shell中习惯的所有选项。
我使用autocd(进入一个目录只输入其名称(没有cd命令)),我想知道我是否有可能首先提出当前目录中存在的所有文件(就像它在csh中工作一样)。
我很习惯这样一个概述我可以打开的文件或者我可以“自动”进入的目录,然后在输入命令之前按下我的命令行中没有任何东西。
现在当我第一次按它时不会触发任何完成机制,但它只是写了一个实际的制表。
我还没有找到任何解决方案,如果有人有任何魔术选择来获得这个结果,请随时启发我!
由于
答案 0 :(得分:3)
我找到了办法!
不需要autocd,尽管zsh中存在此选项
放入~/.zshrc
:
first-tab() {
if [[ $#BUFFER == 0 ]]; then
BUFFER="cd "
CURSOR=3
zle list-choices
else
zle expand-or-complete
fi
}
zle -N first-tab
bindkey '^I' first-tab
感谢您提出这个问题:zsh tab completion on empty line
所以按Tab键一次,你就会得到" cd"和现有的目录。
结帐man zshoptions
以查找可能有用的其他现有选项
(setopt menucomplete
可能对保存选项卡很有用,但也可以更改其他完成的行为。)
答案 1 :(得分:0)
这是另一个更复杂的变体。
它可以配置为在这些情况下使用全局变量前置“cd”或“./”。
export TAB_LIST_FILES_PREFIX
# 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
# If you want 'cd ' or './' to be prepended, write in your .zshrc 'export TAB_LIST_FILES_PREFIX'
# I recommend to 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
中的更多详情