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.