탭 완성으로 지정된 절대 디렉토리를 무시하시겠습니까?

탭 완성으로 지정된 절대 디렉토리를 무시하시겠습니까?

저는 많은 사용자가 있는 클러스터에서 작업합니다. 클러스터에는 내 사용자 이름과 첫 글자가 같은 사용자가 50명 있고, 마지막 글자까지 이름이 같은 사용자가 50명 있습니다. 탭을 완료하면 문자를 몇 개 더 입력하는 대신 탭을 누른 다음 마지막 문자를 입력하는 것보다 /home/e만 보고 싶습니다 ./home/elsherbini/

FIGNORE는 절대 경로에서는 작동하지 않고 파일 접미사에서만 작동하는 것 같습니다. 탭 완성을 위해 선별된 디렉터리 목록을 무시하는 방법이 있나요?

GNU bash, 버전 4.1.2(1)-릴리스(x86_64-redhat-linux-gnu)

답변1

제가 제안하고 싶은 한 가지 방법은 디렉토리 경로 alias만 걱정된다면 여기 home에 아래 내용을 추가하는 profile것입니다. 귀하가 만든 고유한 별칭이 무엇이든 첫 번째 문자까지 자동 완성되어야 합니다.

alias myHome="cd /home/elsherbini"
. .profile
my\T
pwd
/home/elsherbini

편집하다:

다른 방법은키 바인딩하지만 이것이 도움이 된다면 에서의 사용법을 고려하여 이 경우에도 빠른 double click및 가 필요합니다 .right clickPuTTY

completeIt(){ echo "elsherbini"; }
bind -x '"\C-h": completeIt;'

를 사용하면 Control-H사용자 정의된 문자열(예: 사용자 이름)이 표시됩니다. 용법:

$ cd
elsherbini

답변2

나는 zsh완성을 매우 철저하게 사용자 정의할 수 있는 것을 사용하고 있습니다. 이 옵션은 특정 패턴이 완료되는 것을 방지합니다.

autoload -Uz compinit; compinit
# ignore some common patterns that we usually don't want as completions
zstyle ':completion:*' ignored-patterns "/usr/share/iscan" "/usr/lib/iscan" \
        "iscan" "/usr/lib/ispell" "ispell" "/usr/lib64" "/usr/lib32" \
        "/usr/libx32" "/usr/libexec" "/srv/tftp" "chkwins" "dpkg-buildflags"

답변3

간단한 디렉토리 완성을 위해 내장 기능을 재정의할 수 있습니다 ( 및 compgen의 경우 ). 예를 들어, 이 함수를 ~/.bashrc에 넣으세요.cdls

compgen(){
    local IFS=$'\n'
    local x tmp
    x=$( builtin compgen "$@" ) &&
    while read -r tmp; do
        [[ "$tmp" =~ ^/home/e && ! "$tmp" =~ ^/home/elsherbini$ ]] ||
        echo "$tmp"
    done <<< "$x"
}

내장된 기능을 실행 compgen하고 출력을 필터링하여 정규식으로 시작 ^/home/e하고 일치하지 않는 줄이 ^/home/elsherbini$가능한 완성 목록에서 제거되도록 합니다. 정규식은 내부에서 인용되지 않습니다 [[]].

관련 정보