0

我目前正在从 csh 切换到 zsh 我正在编写一个 .zshrc 试图获得我在这个新 shell 中习惯的所有选项。

我使用 autocd (进入一个目录,只需输入它的名称(没有 cd 命令),我想知道我是否有可能首先提出当前目录中存在的所有文件(就像它在 csh 中工作一样)。

我非常习惯这种方式来概览我可以打开的文件或我可以“autocd”进入的目录,然后输入我的命令,然后在我的命令行中写入任何内容。

现在,当我第一次按下它时,它不会触发任何完成机制,而只是写一个实际的表格。

我还没有找到任何解决方案,如果有人有任何神奇的选择来获得这个结果,请随时启发我!

谢谢

4

2 回答 2

4

我找到了一个方法!
不需要 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可能对保存选项卡很有用,但也可以更改其他完成的行为。)

于 2015-03-17T15:50:07.063 回答
0

这是另一个更复杂的变体。

  • 它将在空命令行上以及任何命令的中间列出文件。
  • 它将在空命令行上列出目录。
  • 它将在空命令行上列出可执行文件。

在这些情况下,可以将其配置为在带有全局变量的情况下添加“cd”或“./”。

export TAB_LIST_FILES_PREFIX

tab_list_files_example

# 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

这篇文章中的更多细节

于 2017-01-31T10:36:00.660 回答