Bash 자동 완성 : 먼저 파일을 나열한 다음 순환


27

첫 번째 탭이 자동 완성되는 방식으로 bash를 구성하여 가능한 모든 파일을 나열하고 후속 파일에서 선택 사항을 순환 할 수 있습니까?

두 옵션 모두 개별적으로 수행하기 쉽고 다른 키에 바인딩 할 수는 있지만 위의 내용은 완벽하지만 그물에서 찾을 수는 없습니다.


3
ZSH를 사용한 지 오래되었지만 자동 완성 기능은 다음과 같습니다.
— jordanm

1
@jordanm 아무것도 작동하지 않으면 옵션처럼 보이지만 .bashrc 등에서 ZSH 동등 항목으로 모든 것을 업데이트해야하므로 피하고 싶습니다.
— Voo

답변:


31

이것은 당신이 원하는 것에 가깝습니다.

bind "TAB:menu-complete"
bind "set show-all-if-ambiguous on"

1
작은 결함을 제외하고 첫 번째 탭에서 자동 완성되는 거의 완벽하지 않습니다. 정확한 이름을 찾으려고하면 조금 성 가실 수 있습니다 (즉, 원하는 경우 더 많은 문자를 삭제해야합니다) 그때 변경),하지만 나는 그와 함께 살 의향이 있습니다.
— Voo

1
어떻게 쉽게 취소 할 수 있습니까?
— dingalapadum

1
bind "TAB:complete"; bind "set show-all-if-ambiguous off"
— Jim Paris

13
@Voo는 세 번째 줄 bind "set menu-complete-display-prefix on"을 추가하면 자동 완성없이 첫 번째 탭에 후보자를 나열합니다.
— Naitree

2
@Naitree는 귀하의 제안을 충분히 찬성 할 수 없습니다. 기본 bash 동작보다 훨씬 좋습니다. 고맙습니다.
— JBeurer

1

이것이 내가 사용하는 것입니다. 내가 말할 수있는 한 정확히 당신이 원하는 것을합니다.

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

이것은 Mac (10.13 & 10.14)과 Ubuntu (16.04 & 18.04)에서 작동합니다.


0

고려 했습니까? 수퍼 유저에서 참조되었습니다 ...

[[ $- = *i* ]] && bind TAB:menu-complete

1
menu-complete질문의 절반에 불과합니다. 질문에 따르면 "[b] 두 가지 옵션은 개별적으로 쉽게 수행 할 수 있습니다" .
— jw013

예, 두 가지 옵션 중 하나로 동작을 변경하는 방법을 알고 있지만 쉬운 부분입니다. 실제 문제는 둘을 하나로 결합하는 방법입니다.
— Voo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.