2015-02-25 4 views
0

В настоящее время я перехожу из csh в zsh. Я пишу .zshrc, пытаясь получить все параметры, к которым я привык, в этой новой оболочке.zsh - завершение первой вкладки с autocd

Я использую autocd (чтобы войти в каталог, просто набрав его имя (без команды cd), и мне интересно, возможно ли, что вначале я предлагаю все файлы, существующие в текущем каталоге (например, он работает в csh) .

Я уже привык к этому, как иметь обзор файлов можно открыть или каталог, я могу «autocd» в, перед вводом моей команды просто нажав без все, что написано в моей командной строке еще.

правых теперь, когда я впервые нажимаю, он не запускает какой-либо механизм завершения, но он просто записывает фактическую таблицу.

Я еще не нашел решения, и если у кого есть какие-то магические возможности для получения этих результатов, не стесняйтесь просвещать меня!

Thanks

ответ

1

Я нашел способ!
Нет необходимости 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

Так нажмите вкладку один раз, и вы получите «CD» и существующие каталоги.

заказ man zshoptions для других существующих вариантов, которые могли бы быть полезными
(setopt menucomplete может быть полезным, чтобы сохранить закладку, но изменить поведение для другого завершения, а также.)

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 

Подробнее в this post

Смежные вопросы