단일 동일한 파일 이름에 대한 자동 완성 무시

단일 동일한 파일 이름에 대한 자동 완성 무시

종종 파일 이름(현재 디렉터리에서 탭 완성이 가능한 유일한 파일)을 명령 앞에 전달한 다음 여러 탭을 (잘못) 누르면 동일한 파일 이름이 여러 번 완성되고 삭제 또는 취소하고 다시 시작했습니다.

다른 파일을 생성하거나 숨기지 않고 이 동작을 비활성화할 수 있는 방법이 있습니까?

ls <Tab>filename <Tab>filename <Tab>filename

답변1

nospace한 가지 해결책은 옵션을 사용하는 것입니다.complete 내장.

먼저 완성을 정의하는 방법을 알아야 합니다.ls

$ complete -p ls
complete -F _longopt ls

그런 다음 추가하여 수정합니다.-o nospace

$ complete -o nospace -F _longopt ls

따라서 여러 번 누르더라도 Tab ↹일치하는 항목이 없으며 명령줄에 매개변수가 추가되지 않습니다.

부작용: 에 다른 매개변수를 추가하려면 줄 끝에 공백을 수동으로 추가해야 합니다 ls.

이러한 부작용을 피하려면 _longopt함수를 수정하여 동일한 인수가 두 번 일치하지 않도록 할 수 있습니다(이는 사소한 일이 아닐 수 있음).

다른 명령에 적용하고 영구적으로 만드는 방법

일치 항목 뒤에 후행 공백을 추가하는 것이 기본 동작입니다. -o nospace지정된 완성 규칙을 사용할 때 사용하는 것 외에 다른 방법이 있는지 모르겠습니다 complete.

또한 내장 명령에 대해서도 완료 규칙이 어딘가에 지정되어 있다는 점을 명심하십시오(내 노트북의 이 폴더에 있음: ) /usr/share/bash-completion. 파일을 보면 /usr/share/bash-completion/bash-completion완성이 정의된 위치를 볼 수 있습니다 ls.

complete -F _longopt a2ps awk base64 bash bc bison cat chroot colordiff cp \
  csplit cut date df diff dir du enscript env expand fmt fold gperf \
  grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
  mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
  sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
  texindex touch tr uname unexpand uniq units vdir wc who

동일한 규칙이 다양한 명령(예: cp, mv, rm...)에 적용되므로 을 추가하여 수정하면 변경 사항이 다른 모든 명령 -o nospace에 영향을 미칩니다 .ls

전역 설정을 수정하는 것이 불편하다면(루트 액세스가 필요함) ~/.bash_completion다음과 같이 작성할 수 있습니다(존재하지 않는 경우 이 파일을 생성).

complete -F _longopt -o nospace a2ps awk base64 bash bc bison cat chroot colordiff cp \
  csplit cut date df diff dir du enscript env expand fmt fold gperf \
  grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
  mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
  sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
  texindex touch tr uname unexpand uniq units vdir wc who

/usr/share/bash-completion/bash-completion여기에 나열되지 않은 다른 명령의 완성을 수정하려면 파일이나 폴더에서 해당 명령을 찾으십시오 /usr/share/bash-completion/completions.

관련 정보