
중복되지 않음:
나는 디렉토리 이름을 완성하거나 고정된 디렉토리에서 스크립트를 실행하는 방법을 찾고 있지 않습니다. 내가 해결하려는 문제는 완료하는 것입니다.현재의목차아니요긴급한/
.
나는 zsh가 bash처럼 탭 완성 기능을 사용할 수 있었으면 좋겠다 ./
.
.TABTABbash를 사용하면 을 눌러 모든 파일을 보는 데 익숙합니다 .현재 작업 디렉토리먼저 완료된 ./
다음 해당 디렉토리의 모든 것을 표시하기 때문입니다. 내가 /어떻게든 피하고 싶은 이유는 독일어 키보드에서는 두 손가락과 Shift를 사용하거나 숫자 패드에서 멀리 떨어져 있는 것보다 훨씬 더 어렵고 /, a를 입력하는 것보다 bash로 다시 전환하는 편이 낫기 때문입니다. 내가 달성하고 싶은 것, 즉 bash가 하는 일은 다음과 같습니다.TAB/
$ . <TAB>
$ ./ <TAB>
foo.sh somedir/
$ ./ <F><TAB>
$ ./foo.sh <ENTER>
zsh/oh-my-zsh를 사용하면 을 클릭할 때 (점 공간)이 .TAB표시되는데 .
이는 전혀 소용이 없습니다.
zstyle ':completion:*' special-dirs true
withsetopt auto_cd
(oh-my-zsh 기본값)를 사용하면 top 옵션이 훨씬 덜 유용해져서../
이 옵션을 껐습니다. 완성되어 기쁘네요cd
..
열려 있지 않으며$PATH
그대로 유지되어야 합니다.f<TAB>
예를 들어 완료./foo.sh
해도 괜찮습니다 .
.
zsh가 로컬 디렉토리 내용을 즉시 또는 더 효과적으로 완성하도록 어떻게 가르칠 수 있습니까 ./
? 아니면 을 포함하지 않는 효율적인 방법으로 로컬 스크립트 파일을 처리하는 다른 방법이 있습니까 /?
답변1
위대한 도전! 명령줄에서 시도해보고 작동하면 ~/.zshrc에 추가하세요.
bindkey '^I' dotcomplete
zle -N dotcomplete
function dotcomplete() {
if [[ $BUFFER =~ ^'\.'$ ]]; then
BUFFER='./'
CURSOR=2
zle list-choices
else
zle expand-or-complete
fi
}
TAB(^I)을 누를 때마다 실행되는 함수를 추가합니다. 현재 입력 중인 줄에 점(^=줄 시작, '\.'=슈퍼 이스케이프 점, $=줄 끝)만 포함되어 있으면 점을 ./로 바꾸고 일반 완성을 계속합니다.
그것은 당신이 요청한 것을 정확히 수행하지 않습니다. 즉, 해당 지점을 현재 디렉토리로 취급하는 것입니다. 하지만 저장하려는 키 입력이 저장됩니다.
답변2
귀하의 f<TAB>
옵션/해결 방법을 고려하여 다음을 제안합니다.
$ function f(){ local x=$1; shift; ./"$x" "$@"; }
$ f foo<TAB>
f마지막 줄 뒤의 공백에 유의하세요.