bash - 대소문자를 무시하지만 모호한 경우 자동 완성을 허용하지 않습니다.

bash - 대소문자를 무시하지만 모호한 경우 자동 완성을 허용하지 않습니다.

최근에 bash 자동완성을 사용하고 대소문자를 무시하는 데 문제가 발생했습니다.

다음 디렉토리가 있다고 가정해 보겠습니다.

[xiaobai@xiaobai test]$ l
total 20K
3407873 drwx------. 60 xiaobai xiaobai 4.0K May 25 17:17 ../
3409017 drwxrwxr-x.  2 xiaobai xiaobai 4.0K May 25 17:35 hello/
3681826 drwxrwxr-x.  2 xiaobai xiaobai 4.0K May 25 17:55 Hello_STACKOVERFLOW/
3681837 drwxrwxr-x.  2 xiaobai xiaobai 4.0K May 25 17:55 Hello_StackOverflow/
3412549 drwxrwxr-x.  5 xiaobai xiaobai 4.0K May 25 17:56 ./
[xiaobai@xiaobai test]$

그런 다음 cd h[Tab]:

[xiaobai@xiaobai test]$ cd h #and press [Tab]
hello/               Hello_StackOverflow/ Hello_STACKOVERFLOW/ 
[xiaobai@xiaobai test]$ cd hello #auto generate

새 명령 프롬프트에는 자동 완성 "hello"가 있고 대체 "hello"가 존재한다는 것을 알 수 있습니다. 하지만 여기서는 /를 입력하거나 [Enter] 키를 눌러 hello/를 입력할 수 있으므로 문제가 없습니다. 아니면 밑줄_을 삽입하고 [Tab]을 더 눌러 Hello_*:

[xiaobai@xiaobai test]$ cd hello_ #and press [Tab]
Hello_StackOverflow/ Hello_STACKOVERFLOW/ 
[xiaobai@xiaobai test]$ cd Hello_StackOverflow #auto generate

이제 문제는 분명해졌습니다. 내 목표가 'Hello_STACKOVERFLOW/'라면 어떻게 될까요?"tackOverflow"를 삭제하려면 백스페이스 키를 눌러야 합니다.그런 다음 T+[Tab]을 삽입하여 목표를 달성하세요.

내가 원하는 것은:

[xiaobai@xiaobai test]$ cd hello_ #and press [Tab]
Hello_StackOverflow/ Hello_STACKOVERFLOW/ 
[xiaobai@xiaobai test]$ cd Hello_S #without 'tackOverflow', so i just have to type T+[Tab] without redundant erase step.

물론 그런 문제는 없을 겁니다완료-무시-케이스오프RC 입력문서. 그러나 나는 대소문자를 무시하고 모호성이 발생할 때 자동 완성을 피하는 것을 좋아합니다. 이것이 가능합니까?

답변1

문제에 대한 해결책이 있습니다.

노력하다:

bind 'set completion-ignore-case on'
bind 'TAB:menu-complete'
bind 'set menu-complete-display-prefix on'
bind 'set show-all-if-ambiguous on'

유형 cd h, Tab. 라인은 까지 확장됩니다 cd hello.

그런 다음 , 를 입력 합니다 _. Tab라인은 다음으로 확장됩니다.cd Hello_StackOverflow

에 따르면 Tab, Tab. 라인은 다음으로 확장됩니다.cd Hello_STACKOVERFLOW/

설명하다:

menu-complete완료와 비슷하지만 완료할 단어를 가능한 완료 목록에서 한 번 나타나는 단어로 바꿉니다. 가능한 완성 목록을 통해 메뉴 완성 단계를 반복하고 각 일치 항목을 차례로 삽입합니다. 목록의 끝 부분이 완료되면 벨소리가 울리고(벨소리 스타일 설정에 따라) 원본 텍스트가 복원됩니다. 이 명령은 TAB에 바인딩되도록 의도되었지만 기본적으로 바인딩되지는 않습니다.

에서 사용 가능bash-2.02-alpha1

menu-complete-display-prefixon으로 설정된 경우 메뉴 완성은 목록을 반복하기 전에 가능한 완성 목록(비어 있을 수 있음)의 공통 접두어를 표시합니다.

에서 사용 가능bash-4.2-알파

show-all-if-ambiguous이는 완성 함수의 기본 동작을 변경합니다. "켜기"로 설정하면 완료 가능한 단어가 여러 개 있는 경우 벨을 울리는 대신 일치하는 항목이 즉시 나열됩니다.

menu-complete-display-prefix같이 일한 이후로bash-4.3-알파

답변2

나에게 가장 좋은 옵션은 단순히 추가하는 것임을 알았습니다.

bind 'set menu-complete-display-prefix on'

도착하다 .inputrc.

첫 번째 탭은 명시적 접두사를 완성합니다. 두 번째 탭에는 나머지 모호한 옵션이 모두 나열됩니다. 문자를 입력하면 세 번째 탭에서 명령이 완료됩니다.

관련 정보