tcsh
저는 SUSE 11 상자에서 사용하고 있는데 입력할 때 깨달았습니다.
make
Tab
현재 디렉터리의 파일 대신 Makefile에서 사용할 수 있는 규칙을 자동 완성할 수 있습니다.
나는 직장에서 RedHat과 Ubuntu를, 집에서 Debian을 사용하여 tcsh
테스트했지만 (모두 사용됨) 이들 중 어느 것도 이(IMO) 좋은 동작을 지원하지 않습니다.
다른 배포판에서도 이를 어떻게 달성할 수 있나요?
이것은 제가 수년 전부터 갖고 싶었던 것입니다.
답변1
complete
셸 시작 파일( )에 대한 호출을 추가해야 합니다 ~/.tcshrc
. 분명히 SuSE 상자에는 다음과 같은 규칙이 미리 정의되어 있습니다 make
. /etc/csh.cshrc
tcsh() 옆에 제공된 파일이나 다른 파일에서 해당 규칙을 찾으십시오 rpm -ql tcsh
.
tcsh 배포판에는 몇 가지 예제 완성이 포함되어 있습니다(데비안은 이를 에 넣습니다 /usr/share/doc/tcsh/examples/complete.tcsh.gz
) make
.
complete make \
'n/-f/f/' \
'c/*=/f/' \
'n@*@`cat -s GNUmakefile Makefile makefile |& sed -n -e "/No such file/d" -e "/^[^ #].*:/s/:.*//p"`@'
답변2
사용StackOverflow에 대한 답변입니다.자체를 사용하여 make
사용 가능한 모든 대상을 계산하고 아래와 같이 데비안 예제 스크립트에 통합합니다.여기에 또 다른 대답이 있습니다그런 다음 더 추가하면 다음이 생성됩니다.
alias complete_make_target_filter 'awk -F: '"'"'/^[a-zA-Z0-9][^\$#\/\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}'"'"
complete make \
'n/--assume-old/f/' \
'n/--assume-new/f/' \
'n/--directory/d/' \
'n/--file/f/' \
'n/--include-dir/d/' \
'n/--makefile/f/' \
'n/--new-file/f/' \
'n/--old-file/f/' \
'n/--what-if/f/' \
'n/-d/d/' \
'n/-f/f/' \
'c/*=/f/' \
'n@*@`make -qp |& grep -v Stop |complete_make_target_filter|xargs echo --always-make --directory -d --debug -e --environment-overrides --file --makefile -i --ignore-errors -I --include-dir -j --jobs -k --keep-going -l --load-average --max-load -L --check-symlink-times -n --just-print --dry-run --recon -o --old-file --assume-old -p --print-database -q --question -r --no-builtin-rules -R --no-builtin-variables -s --silent --quiet -S --no-keep-going --stop -t --touch -v --version -w --print-directory --no-print-directory -W --what-if --new-file --assume-new --warn-undefined-variables`@'
다른 멋진 완성 스크립트가 있는 디렉토리에 넣고 ~/.complete/
, 모두 디렉토리에 넣으면 ~/.cshrc
모든 준비가 완료됩니다.