나는 찾을 수 없는 tcsh'ism을 원합니다. 내용이 없는 빈 줄에서 tab을 누르고 ls와 동등한 것을 보고 싶습니다. 즉 내가 원한다
$ <tab>
다른 일을 하고 나에게 a\t를 주세요. 명령 완성을 위한 훌륭한 리소스를 찾았지만 이 기본 사례에서는 작동하지 않습니다. 이것에 대한 어떤 도움이라도 좋을 것입니다! 감사해요.
답변1
줄 시작 부분의 동작 Tab이유insert-tab
스타일. 그러나 지원되는 동작은 두 가지뿐입니다.
- 평소대로 완료하세요.
zstyle ':completion:*' insert-tab false
- 아래에 탭을 삽입하세요
zstyle ':completion:*' insert-tab true
- 다음 중 하나
zstyle ':completion:*' insert-tab pending[=N]
해당 위치에서 명령을 완료하고 싶다면 zstyle ':completion:*' insert-tab true
괜찮습니다. 현재 디렉토리에 있는 파일을 나열하는 등 다른 것을 원한다면 _main_complete
.
ㅏzsh-workers 목록의 최신 주제논의 insert-tab
.
답변2
# expand-or-complete-or-list-files
function expand-or-complete-or-list-files() {
if [[ $#BUFFER == 0 ]]; then
BUFFER="ls "
CURSOR=3
zle list-choices
zle backward-kill-word
else
zle expand-or-complete
fi
}
zle -N expand-or-complete-or-list-files
# bind to tab
bindkey '^I' expand-or-complete-or-list-files
답변3
이것은 빈 줄에서 탭을 누를 때 zsh에서 tcsh의 자동 목록을 완전히 구현한 것입니다.
% <TAB>
여기있어:
# list dir with TAB, when there are only spaces/no text before cursor,
# or complete words, that are before cursor only (like in tcsh)
tcsh_autolist() { if [[ -z ${LBUFFER// } ]]
then BUFFER="ls " CURSOR=3 zle list-choices
else zle expand-or-complete-prefix; fi }
zle -N tcsh_autolist
bindkey '^I' tcsh_autolist
tcsh를 더 자세히 에뮬레이트하려면 .zshrc에 다음을 추가하세요.
unsetopt always_last_prompt # print completion suggestions above prompt
답변4
나는 썼다이것zsh 위젯은 빈 줄뿐만 아니라 명령을 입력할 때에도 TAB 사용을 향상시킵니다.
- 그것은 나열됩니다문서빈 명령줄과 명령 중간에 있습니다.
- 그것은 나열됩니다목차빈 명령줄에.
- 그것은 나열됩니다실행 가능 파일빈 명령줄에.
이러한 경우 "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