bash에서 tcsh의 향상된 완성 기능과 동등한 기능을 어떻게 얻을 수 있나요?

bash에서 tcsh의 향상된 완성 기능과 동등한 기능을 어떻게 얻을 수 있나요?

내부에tcsh 맨페이지, 의 영향은 set complete = enhance다음과 같이 정의됩니다.

[...] 완료 1) 대소문자 무시, 2) 마침표, 하이픈 및 밑줄(".", "-" 및 "_")을 단어 구분 기호로 처리하며 하이픈과 밑줄은 동일합니다.

readline1)에 대해서는 구성을 통해 사례를 무시할 수 있는 것으로 알고 있습니다 set completion-ignore-case on. 그래서 내 질문은 2)에만 관련됩니다.

예를 들어 다음과 같이 기본 이름은 비슷하지만 확장자가 다른 여러 파일이 포함된 디렉터리가 있는 경우:

$ ls
file0.dat file1.dat file2.dat files.sh

그런 다음 쉘이 파일 확장자를 완성하기를 원합니다.

$ cat .sh<TAB>
$ cat files.sh

이 동작을 달성하거나 최소한 모방할 수 있는 방법이 있습니까 bash?

편집하다

첫 번째 답변에 이어 tcsh기능의 작동 방식을 보다 정확하게 보여주는 추가 예는 다음과 같습니다.

$ ls
abc.foo abc.bar cab.foo cab.bar
$ cat a.f<TAB>
$ cat abc.foo

또는:

$ cat .b<TAB>
abc.bar cab.bar
$ cat .bar

실제로 tcsh기본 이름과 확장자가 완성되었습니다. 여기서의 동작은 TAB 완성을 모두 삽입하는 대신 일반적으로 수행하는 것처럼 여러 가능성을 나열하는 것입니다.

답변1

이것이 꼭 필요한 것은 아니지만 거의 가깝습니다. Ctrl+ x, 단축키 g( C-x gemacsspeak에서) 단축키는 glob의 확장을 나열합니다. 따라서 귀하의 예에서는 다음과 같습니다.

$ cat *.b*<Ctrl><x><g>
abc.bar  cab.bar  

따라서 설명하는 것과는 달리 tcsh유효한 glob이 필요합니다. 즉, 다음과 같습니다.

$ echo *.b*

단축키는 와 Ctrl를 동시에 누른 x다음 손을 떼고 누르는 것입니다 g.

이에 대한 문서는 다음과 같습니다 man bash.

   glob-list-expansions (C-x g)
          The list  of  expansions  that  would  have  been  generated  by
          glob-expand-word  is  displayed,  and the line is redrawn.  If a
          numeric argument is supplied, an  asterisk  is  appended  before
          pathname expansion.

관련 정보